Zwei Tabelle verbinden für eine Berichtausgabe

  • Hallo,


    vielleicht kann mir hier im Forum jemand vernünftig weiterhelfen. Leider kenne ich mich mit PHP noch nicht so gut aus. Ich versuche mein Problem so gut wie es geht zu erklären. In meiner Datenbank habe ich zwei (später drei) Tabellen. Diese möchte ich für einen Bericht zusammenfügen.


    Meine Ausgabe später sollte wie folgt aussehen:


    19.12.2015 um 08:00 Uhr – News eingetragen
    19.12.2015 um 08:25 Uhr – Erinnerung bearbeitet
    19.12.2015 um 08:26 Uhr – News eingetragen
    19.12.2015 um 09:25 Uhr – Termin hinzugefügt
    usw..


    Meine erste Version sieht so aus



    Die dazugehörige Ausgabe sieht so aus



    Als Ergebnis erhalte ich


    [Blockierte Grafik: http://www.bilder-upload.eu/upload/683f03-1450526339.jpg]


    Schaut also gut aus. Damit wäre die erste Tabelle erledigt. Jetzt möchte ich aus meiner zweiten Tabelle die Daten dazwischen "schmuggeln" Wenn in der zweiten Tabelle ein Eintrag mit 15.12.2015 - 09:02:22 vorhanden ist, sollte diese zwischen den ersten und den zweiten geschrieben werden.


    Die zweite Tabelle hat dieses SELECT


    SQL
    SELECT erinnerung_id, erinnerung_userCode, erinnerung_nr, erinnerung_status, erinnerung_update_d, erinnerung_update_u 
    		FROM erinnerung
    		WHERE erinnerung_userCode =?
    		AND erinnerung_update_d =?


    Jetzt stellt sich mir die Frage, wie füge ich beide Tabelle so zusammen dass ich die oben beschriebene Ausgabe erhalte? Jemand meinte zu mir mit UNION das klappt aber nicht wirklich bzw. man konnte mir nicht erklären wie ich dieses auf meinen Code anwenden kann. Vielleicht gibt es hier im Forum jemanden, der mir es anhand eines Beispieles erklären kann.


    Vielen Dank für eure Hilfe.


    EDIT:


    Ich habe jetzt alle einzelnen Funktion erstellt



    Die Ausgabe könnt ihr auf dem Bild sehen


    [Blockierte Grafik: http://www.bilder-upload.eu/upload/19cd98-1450528916.png]

  • Mein Problem ist, ich möchte gerne den Bereich Kunden, den Bereich Update Erinnerungen und den Bereich Neue Erinnerungen zusammenfassen.
    Das ganze nach Uhrzeit sortiert. Die Daten wie du sehen kannst, liegen in drei verschiedenen Tabellen.

  • Naja, dan JOIN bzw LEFT JOIN.
    Deinem Code entnehme ich , dass es 4 Tabellen gibt: kunden, web_kunden kundenerinnerung und web_kundenerinnerungen.
    (verwirrend)
    Du wählst eine (SELECT) und joinst die anderen ran.
    Dabei kommt es an, ob die Beziehungen (ON ...) immer vorhanden sind, oder vorhanden sein können.
    Im Normalfall gibt es zB eine eindeutige Kunden id - zB einfach nur id oder kd_id.


    Um dafür eine Query zu schreinben, müssen wir erstmal wissen, wie die Tabellen aussehen.
    Du kannst (wenn es öffentlich verfügbar sein darf) die Create-Statements posten.
    (bekommst Du zB durch: SHOW CREATE TABLE meine_tabelle; siehe http://dev.mysql.com/doc/refma…en/show-create-table.html)


    Ich gehe mal nur von Tabelle kunden und kundenerinnerung aus.


    Für jeden Kunden gibt es (logisch) einen Datensatz in der (Haupttabelle) Tabelle kunden.
    Für jeden Kunden kann es keinen, einen, oder mehrere Einträge in der Tabelle kundenerinnerung geben.


    Tabelle Bsp:


    Kunde mit id 1 hat keine Einträge in Tabelle kundenerinnerung.
    Kunde mit id 2 hat einen, und Kunde mit id 3 hat gleich mehrere Erinnerungen.


    Ein SELECT sähe dann in etwa so aus:

    SQL
    SELECT 
        `kd`.`id`, `kd`.`kdnr`, `kd`.`name`, -- von `kunden` selectiert
        `kde`.`msg`, `kde`.`something` -- von `kundenerinnerung` selectiert
    FROM `kunden` AS `kd` -- AS `alias name`
    LEFT JOIN `kundenerinnerung` AS `kde` 
        ON `kde`.`id` = `kd`.`id` -- wenn das feld in beiden tabellen id heisst, kannst du auch USING (`id`) nutzen
    WHERE 
        `kd`.`id` = ?
        AND ...


    Suchst Du nun nach kd.id 1, dann bekommst Du in etwa:

    Code
    id  | kdnr  | name |  msg | something
    ------------------------
    1   |123    | hans | NULL | NULL


    (msg und something NULL, denn in der 2ten Tabelle gab es keine Übereinstimmungen.)
    Beim Select auf kd.id 3 sollte sowas rauskommen:

    Code
    id  | kdnr  | name  |  msg          | something
    ----------------------------------------------------
    3   |125    | wurst | 'text 3.1'    | 'something 3.1'
    3   |125    | wurst | 'text 3.2'    | 'something 3.2'
    3   |125    | wurst | 'text 3.3'    | 'something 3.3'


    Hoffe das hilft irgendwie =)

  • Hallo,


    vielen Dank für deine sehr ausführliche Erklärung. Allerdings geht dieses schon ein Schritt weiter wie ich es eigentlich brauche, da ich nicht immer eine Beziehung zu den Datensätzen habe. Ich möchte einfach alle Datensätze die ich aus den drei Tabellen bekomme nach Uhrzeit sortieren.

  • Hallo,


    wie du auf meinem Bild sehen kannst, habe ich eine Auflistung pro Tabelle und nach Uhrzeit sortiert bereits erreicht. Jetzt möchte ich ALLE drei Tabellen zusammen führen dass ich EINE Auflistung bekomme und diese nach Uhrzeit sortiert. Noch mehr kann ich leider nicht erklären ;(

  • Ok, also hast Du die 4 Tabellen-Daten per PHP sortiert.
    Das ist unnötig -- das kann der Sql-Server schneller. Ist aber kein muss. Macht halt nur Sinn :D


    Wenn Du jetzt alle zusammen führen willst, dann sind die Daten ja sicherlich schon in Arrays (PHP).
    Dann wäre wohl das einfachste array_merge().
    http://php.net/manual/de/function.array-merge.php

    PHP
    <?php
    $array = array_merge($arr1, $arr2, $arr3);


    Du wirst das Array dann noch einmal sortieren müssen, denk ich.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!