Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Anfängerfragen ›

[gelöst] Komplizierte SQL-Anweisung als CVS exportieren

Eingetragen von Ati (210)
am 05.03.2012 - 08:25 Uhr in
  • Anfängerfragen
  • Drupal 7.x

Hallo zusammen,

ich steh mal wieder etwas auf dem Schlauch. Ich muss das Ergebnis der beiliegenden SQL-Anweisung als CSV-Datei exportieren.
Aktuell habe ich noch nicht so recht den Durchblick wie ich das schaffen kann. Hier mal die SQL-Anweisung.

$sqlexport ="SELECT kundennr_lgort.numkreis,kd_liefnr.kd_liefnr,tagesprotokoll.artikel,
                kd_eigene_art.kd_art_nr,tagesprotokoll.mc1,NULL,NULL,kundennr_lgort.lagerort,NULL,
                tagesprotokoll.menge,tagesprotokoll.au,'|'
                FROM tagesprotokoll
                LEFT JOIN kd_eigene_art ON
                tagesprotokoll.artikel = kd_eigene_art.artikel
                AND tagesprotokoll.kdnr = kd_eigene_art.kunde
                LEFT JOIN kd_liefnr ON
                tagesprotokoll.kdnr = kd_liefnr.kdnr
                LEFT JOIN kundennr_lgort ON
                tagesprotokoll.stichwort = kundennr_lgort.lagerort
                AND tagesprotokoll.kdnr = kundennr_lgort.kunde
                WHERE au IN (".$in_klausel."); ";

Gruß
Ati

‹ Inhaltsfeld verschwunden [gelöst] CCk Blöde Frage... ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Einfachste Lösung ohne

Eingetragen von s.Daniel (331)
am 05.03.2012 - 11:32 Uhr

Einfachste Lösung ohne Drupal:
* phpMyAdmin starten
* Query unter "SQL" eingeben
* Auf "Exportieren" klicken und csv wählen ...

Alternativ gibt es Drupal Module die Du anpassen kannst, Deiner Frage scheint allerdings weniger mit Drupal zu tun zu haben. Falls doch schau mal hier:
https://drupal.org/project/profile_csv
https://drupal.org/project/views_data_export
https://drupal.org/project/views_bonus

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ähm der Export sollte schon

Eingetragen von Ati (210)
am 05.03.2012 - 11:35 Uhr

Ähm der Export sollte schon aus dem Drupal heraus erfolgen. Werde mir Deine Links mal anschauen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hmm steh immer noch da wie

Eingetragen von Ati (210)
am 05.03.2012 - 13:46 Uhr

Hmm steh immer noch da wie ein Ochs vorm Berg. Vielleicht sollte ich mal schildern was für ein wildes Ding ich hier vorhabe.
Ein Kunde von uns hätte gerne alle gelieferten Positionen einer Woche (geht um 2 verschiedene Werke) jeweils eine CSV-Datei.
In dieser CSV-Datei sollen 11 verschiedene Felder sein und abschliessend ein "|". Diese Informationen muss ich nun aus drei
verschiedenen Tabellen rausholen. Der Erste Schritt ist bereits getan...ich habe ein View erstellt, wo man anhand des Stichwortes
(entsprechende Werk) die erste Selektion machen kann. Auf diese Basis muss ich jetzt die anderen Informationen aus dem Originalpost
dazu packen und dieses Ergebnis dann als CSV exportieren.

Ati

  • Anmelden oder Registrieren um Kommentare zu schreiben

Kannst Du dazu einen View

Eingetragen von wla (9461)
am 17.03.2012 - 23:50 Uhr

Kannst Du dazu einen View basteln, mit Du Dein Ergebnis bekommst, oder muß es Deine eigene Abfrage sein? Einen View kannst Du als CSV ausgeben lassen (gibt es ein Modul dazu).

Beste Grüße
Werner

  • Anmelden oder Registrieren um Kommentare zu schreiben

Moin Werner, wie Du anhand

Eingetragen von Ati (210)
am 18.03.2012 - 08:52 Uhr

Moin Werner,

wie Du anhand des ersten Posts lesen kannst benötige ich Daten aus drei verschiedenen Tabellen die als csv-Datei exportiert werden müssen.
Dies habe ich mit einem View nicht hinbekommen. Ich dache ich könnte was über Realationships machen nur wenn
ich eine Beziehung einrichten will, will Firefox sowie InternetExplorer plötzlich eine Datei downloaden..kann also über das UI keine Relationships einrichten.
Das csv-Modul für views kenne ich und nutze es auch schon für andere Sachen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Das Problem

Eingetragen von ronald (3857)
am 18.03.2012 - 10:22 Uhr

besteht wahrscheinlich darin, dass Drupal die Tabellen nicht kennt und auch nicht selber pflegt.

An Drupal vorbei zu programmieren, ist keine gute Idee, auch wenn es zunächst einfacher aussieht.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo Ati, wenn Du die

Eingetragen von wla (9461)
am 18.03.2012 - 10:38 Uhr

Hallo Ati,

wenn Du die Datenbankapplikation selbst geschrieben hättest, wurde ich sagen, schönes SQL-Statement (nur die NULL Werte haben, nach meinem Verständnis, im SEELCT nicht zu suchen). Dummerweise liegt Drupal dazwischen und die Daten liegen vermutlich so nicht in der Datenbank, da Drupal die Felder anders speichert.
Um auf der Metaebene (Tabelle = Datentyp) Joins zu definieren mußt Du sie mittels [do:references References] definieren und bereits beim Erstellen der Datensätze diese Referenzen setzen. Dann kannst Du diese Referenzen im View als Relationship benutzen und so Deine Abfrage zusammenbauen.
Ich fürchte, Du mußt Dich noch mal mit Deiner Datenstruktur intensiver befassen, damit Du Deine Idee in Drupal umgesetzt bekommst.

Beste Grüße
Werner

  • Anmelden oder Registrieren um Kommentare zu schreiben

Nun Gott sei Dank kommt etwas

Eingetragen von Ati (210)
am 18.03.2012 - 10:55 Uhr

Nun Gott sei Dank kommt etwas Bewegung in diesen Thread..so das ich doch mal andere Ansätze höre.
@Ronald...jetzt wo Du es sagst sollte ich nochmal prüfen ob ich die Tabellen nur importiert habe oder ob ich sie in Drupal auch verfügbar gemacht habe.

@wla... nun zu diesem SQL-Export muss ich dann jetzt dochmal was genauer erklären. Ein Kunde von uns möchte am Montag per CSV alle gelieferten
Positionen haben. Die Felder hat er vorgegeben (deshalb auch null-felder dabei). Die Unterscheidung der einzelnen Abteilung erfolgen über das Stichwort.
Auf Basis des Stichwortes wird die interne Abteilungsnummer des Kunden gezogen (1. Tabelle). Des weiteren hat er für unsere Artikel bei sich eigene Artikelnummern.
Hier gilt es eben unsere Artikelnummer und seine Artikelnummer anzuzeigen (2.Tabelle). Die Haupttabelle sind natürlich alle Auftragspositionen der letzten Woche.

@all...ist es schonmal jemandem passiert das der Firefox eine Datei zum Download anbietet wenn man eine Relationship erstellen will?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wenn Du diese Tabellen selber

Eingetragen von wla (9461)
am 18.03.2012 - 11:16 Uhr

Wenn Du diese Tabellen selber gebaut hast und die so vorliegen, dann mußt Du die CSV-Datei in einem eigenen Modul selbst schreiben, was ja kein großer Akt ist, wenn man mit PHP umgehen kann. Den Aufruf der Export-Funktion könnte über einen Menü-Callback (hook_menu benutzen) erfolgen, den der Kunde sogar selbst anstoßen könnte (ausreichende Excection-Time mal vorausgesetzt). Ich bin immer noch der Meinung, daß die NULL im SELECT-Statement nichts zu suchen hat. Die leeren Felder mußt Du dann in der Export-Funktion einsetzen.

Beste Grüße
Werner

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zu dem Entschluß das komplett

Eingetragen von Ati (210)
am 18.03.2012 - 11:40 Uhr

Zu dem Entschluß das komplett selber zu machen bin ich gestern abend gekommen. Deswegen hatte
ich auch diesen Thread gestartet http://www.drupalcenter.de/node/40516 .

  • Anmelden oder Registrieren um Kommentare zu schreiben

Da hast Du aber den falschen

Eingetragen von wla (9461)
am 18.03.2012 - 11:50 Uhr

Da hast Du aber den falschen Ansatz gewählt. Du erstellst die Datei auf dem Server und zeigst einen Link auf die Datei, damit man darüber die Datei herunterladen kann. Du könntest auch einen entsprechenden Datentyp anlegen. Dann legst Du per Programm einen entsprechenden Node an, in dem Du den Pfad einträgst. Diese Nodes kannst Du dann über Views anzeigen.

Beste Grüße
Werner

  • Anmelden oder Registrieren um Kommentare zu schreiben

Also da ich ja einfach

Eingetragen von Ati (210)
am 18.03.2012 - 12:02 Uhr

Also da ich ja einfach getsrickt bin ;-) wollte ich das analog zu der existierenden Lösung machen.

$sqlexport ="SELECT busch_lgort.numkreis,kd_liefnr.kd_liefnr,tagesprotokoll.artikel,
                kd_eigene_art.kd_art_nr,tagesprotokoll.mc1,NULL,NULL,busch_lgort.lagerort,NULL,
                tagesprotokoll.menge,tagesprotokoll.au,'|'
                FROM tagesprotokoll
                LEFT JOIN kd_eigene_art ON
                tagesprotokoll.artikel = kd_eigene_art.artikel
                AND tagesprotokoll.kdnr = kd_eigene_art.kunde
                LEFT JOIN kd_liefnr ON
                tagesprotokoll.kdnr = kd_liefnr.kdnr
                LEFT JOIN busch_lgort ON
                tagesprotokoll.stichwort = busch_lgort.lagerort
                AND tagesprotokoll.kdnr = busch_lgort.kunde
                WHERE au IN (".$in_klausel."); ";

$file = 'busch_'.date("dmY_Hi").'.csv';
header("Content-Type: text/csv");
header("Content-Disposition: attachment; filename=\"$file\"");
$ergebnis=mysql_query($sqlexport);
while($row = mysql_fetch_row($ergebnis)) {
        print implode(';', $row)."\n";}

Wie gesagt das ist der Code der aktuellen Lösung. Wie lautet die mysql_fetch_row-Variante unter Drupal?

@wla hast Du für Deinen Ansatz mal ein Beispiel welches ich mir anschauen kann...habe da ein kleines Problem das nachzuvollziehen was Du da geschrieben hast.

  • Anmelden oder Registrieren um Kommentare zu schreiben

@Werner Ich glaube ich habe

Eingetragen von Ati (210)
am 18.03.2012 - 14:45 Uhr

@Werner
Ich glaube ich habe den ersten Teil hinbekommen....der Link fehlt noch. Hier mal der aktuelle Code:

function buschcsv_my_form_submit($form, &$form_state) {
  $kw = $form_state['values']['kw'];
  $stw = $form_state['values']['stichwort'];
 
  $sql="SELECT busch_lgort.numkreis,kd_liefnr.kd_liefnr,tagesprotokolle.artikel,
                kd_eigene_art.kd_art_nr,tagesprotokolle.mc1,NULL,NULL,busch_lgort.lagerort,NULL,
                tagesprotokolle.menge,tagesprotokolle.au,'|'
                FROM tagesprotokolle
                LEFT JOIN kd_eigene_art ON
                tagesprotokolle.artikel = kd_eigene_art.artikel
                AND tagesprotokolle.kdnr = kd_eigene_art.kunde
                LEFT JOIN kd_liefnr ON
                tagesprotokolle.kdnr = kd_liefnr.kdnr
                LEFT JOIN busch_lgort ON
                tagesprotokolle.stichwort = busch_lgort.lagerort
                AND tagesprotokolle.kdnr = busch_lgort.kunde
                WHERE tagesprotokolle.stichwort = '".$stw."' AND tagesprotokolle.kw ='".$kw."'";
 
  $file = 'sites/busch_'.date("dmY_Hi").'.csv';
  //drupal_set_header("Content-Type: text/csv");
  //drupal_set_header("Content-Disposition: attachment; filename=\"$file\"");
  $result = db_query($sql);
  $fp = fopen($file, 'w');
 
  while ($row = $result->fetchAssoc()) {
         fputcsv($fp, $row,';')."\n";}
  fclose($fp);
  drupal_set_message('Datei wurde erstellt');
}

Oder habe ich Dich falsch verstanden??

Ati

  • Anmelden oder Registrieren um Kommentare zu schreiben

Bis hier sieht das gut aus.

Eingetragen von wla (9461)
am 18.03.2012 - 15:10 Uhr

Bis hier sieht das gut aus. Jetzt einen Node vom Type Doewnload-File anlegen (den Datentyp mußt Du erst definieren) und den Code (das Setzen des Typs nicht vergessen) so schreiben, wie es beim Beispiel von [api:node_object_prepare:7] (unten auf der Seite) zu sehen ist.
Jetzt hast Du einen Node in Drupal erstellt, den Du z.B. mit Views anzeigen kannst.

Beste Grüße
Werner

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hm...versuche mal zu

Eingetragen von Ati (210)
am 18.03.2012 - 16:35 Uhr

Hm...versuche mal zu verstehen was Du meinst ;-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hm...versuche mal zu

Eingetragen von Ati (210)
am 18.03.2012 - 16:35 Uhr

Hm...versuche mal zu verstehen was Du meinst ;-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

So ich habe jetzt mal einen

Eingetragen von Ati (210)
am 19.03.2012 - 09:54 Uhr

So ich habe jetzt mal einen Inhaltstyp download_file angelegt welcher nur aus Title,Path und eben der Datei besteht.
Das Datei-Feld hat den Namen field_csvdatei. Ich kann jetzt per Programm zwar einen Node erstellen aber eben nciht
inkl. Datei..hier mache ich wohl was gravierendes falsch. Anbei mal der aktuelle Code

  $file = 'sites/default/files/busch_'.date("dmY_Hi").'.csv';
  $filename = 'busch_'.date("dmY_Hi").'.csv';
  $result = db_query($sql);
  $fp = fopen($file, 'w');
 
  while ($row = $result->fetchAssoc()) {
         fputcsv($fp, $row,';')."\n";}
  fclose($fp);
 
  $node = new stdClass();
$node->type = 'download_file';
node_object_prepare($node);

$node->title = $filename;
$node->language = LANGUAGE_NONE;
$node->field_csvfile = $file;

$path = 'content/' . $filename;
  $node->path = array('alias' => $path);


node_save($node);

Gruß
Ati

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wenn Du den Node-Typ

Eingetragen von wla (9461)
am 19.03.2012 - 10:28 Uhr

Wenn Du den Node-Typ definiert hast, einmal einen Testnode anlegen, den mittels node_load(ID) in einer Testfunktion laden und dann mit print_r ausgeben. Jetzt hast Du die genaue Struktur für diesen Typ und brauchst den nur noch entsprechend befüllen. Sieh mal in anderen Modulen nach, aber um eine Datei in Drupal einzutragen muß ein Eintrag in der files-Tabelle gemacht werden und auf die dabei verwendete fid wird im Node referenziert.
Wie Du einen File bei Drupal anlegst, um die fid zu bekommen, findest Du unter api.drupal.org/api/drupal/includes!file.inc/group/file/7. Dort stehen die Felder des File-Objects und mit der Funktion file_save bringst Du den File in die Drupal Struktur. Ich habe jetzt ca. 10 Minuten gesucht, bis ich diese Information gefunden hatte. Ich habe das nämlich auch noch nicht per Programm gemacht und war neugierig.

Beste Grüße
Werner

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich hatte mal was nach diesem

Eingetragen von Ati (210)
am 19.03.2012 - 10:35 Uhr

Ich hatte mal was nach diesem Link versucht http://www.comm-press.de/en/node/843 ... wie man sich denken kann ohne Erfolg.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Das sieht aber ordentlich

Eingetragen von wla (9461)
am 19.03.2012 - 10:48 Uhr

Das sieht aber ordentlich aus. Einzig bei der NodeID im Comment-Setting ist ein Fehler, da die NodeID aus dem gerade gesichterten Node zu nehmen wäre

  $comment = (object) array(
    'nid' => $node->nid,
    'cid' => 0,
    . . . . . .

Beste Grüße
Werner

  • Anmelden oder Registrieren um Kommentare zu schreiben

Das ist aber doch der Comment

Eingetragen von Ati (210)
am 19.03.2012 - 10:53 Uhr

Das ist aber doch der Comment Bereich oder? Ich hatte mich hier nur auf den File-Part konzentriert.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja, das bezieht sich nur auf

Eingetragen von wla (9461)
am 19.03.2012 - 11:01 Uhr

Ja, das bezieht sich nur auf Comments.
Zu dem File-Bereich gibt bei den Kommentaren unter dem Blogeintrag noch einen Hinweis, wie man es besser (oder richtiger) machen sollte. Ich würde das mit den dort genannte Funktionen noch mal probieren. Das sieht ziemlich gut aus, auch wenn ich das selbst noch nicht gemacht habe.

Beste Grüße
Werner

  • Anmelden oder Registrieren um Kommentare zu schreiben

So folgender Code läuft ohne

Eingetragen von Ati (210)
am 19.03.2012 - 11:39 Uhr

So folgender Code läuft ohne Fehler durch und die Datei wird auch verschoben und auch in der Tabelle file_managed geschrieben

$node = new stdClass();
$node->type = 'download_file';
node_object_prepare($node);
$node->title = $filename;
$node->language = LANGUAGE_NONE;
$filepath = drupal_realpath($filecsv);
  // Create managed File object and associate with Image field.
  $file = (object) array(
    'uid' => 1,
'filename' => $filecsv,
    'uri' => $filepath,
    'filemime' => file_get_mimetype($filepath),
    'status' => 1,
  );


$file = file_move($file, 'public://');
$path = 'content/' . $filename;
$node->path = array('alias' => $path);
node_save($node);

Was noch fehlt ist das man die Datei downloaden kann wenn man den Node aufruft....es erscheint immer noch der Node ohne Datei.
Wenn ich den Node mit Devel öffne gibt es für field_csvfile keine Einträge..nur ein leeres Array.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Es ist vollbracht!!! Hier mal

Eingetragen von Ati (210)
am 19.03.2012 - 12:59 Uhr

Es ist vollbracht!!! Hier mal der Quellcode

  $filecsv = 'busch_'.date("dmY_Hi").'.csv';
  $filename = 'busch_'.date("dmY_Hi");
  $result = db_query($sql);
  $fp = fopen($filecsv, 'w');
 
  while ($row = $result->fetchAssoc()) {
         fputcsv($fp, $row,';')."\n";}
  fclose($fp);
 
$node = new stdClass();
$node->type = 'download_file';
node_object_prepare($node);
$node->title = $filename;
$node->language = LANGUAGE_NONE;
$filepath = drupal_realpath($filecsv);
// Create managed File object and associate with Image field.
  $file = (object) array(
    'uid' => 1,
'display' => 1,
'filename' => $filename,
    'uri' => $filepath,
    'filemime' => file_get_mimetype($filepath),
    'status' => 1,
  );

$file = file_move($file, 'public://');

$node->field_csvfile[LANGUAGE_NONE][0] = (array)$file;

$path = 'content/' . $filename;
$node->path = array('alias' => $path);
node_save($node);
drupal_set_message('Datei wurde erstellt');

@Werner...Danke Dir!!!

Ati

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
Weiter

Neue Kommentare

  • Inzwischen sind wir bei
    vor 2 Tagen 16 Stunden
  • Migrieren von D7 auf D8/ D10/ D11
    vor 3 Tagen 8 Stunden
  • melde mich mal wieder, da ich
    vor 8 Wochen 12 Stunden
  • Hey danke
    vor 8 Wochen 1 Tag
  • Update: jetzt gibt's ein
    vor 8 Wochen 2 Tagen
  • Hallo, im Prinzip habe ich
    vor 8 Wochen 6 Tagen
  • Da scheint die Terminologie
    vor 8 Wochen 6 Tagen
  • Kannst doch auch alles direkt
    vor 9 Wochen 3 Tagen
  • In der entsprechenden View
    vor 9 Wochen 3 Tagen
  • Dazu müsstest Du vermutlich
    vor 9 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250235
Registrierte User: 20462

Neue User:

  • marouane.blel
  • capilclinic
  • Quabzibboter

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 33 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association