Wie muss der php Code lauten, wenn ich 2 oder 3 verschiedene Tabellen, aus einer Datenbank vewenden muss?

  • Hallo,


    Wie muss der php Code lauten, wenn ich 2 oder 3 verschiedene Tabellen, aus einer Datenbank vewenden muss?
    So zusagen einen Mysql Datenbank - Verknüpfung!


    Tabelle 1 (Vorname, Name)
    Tabelle 2 (Lieblingsessen)

  • Gibts mehrere Möglichkeiten.
    zB "UNION", "JOIN" oder sogenannte "Subqueries".


    Bsp:


    Hier wäre also 2 Tabellen. Was auffällt ist, dass der Benutzer mit id 3 keinen Eintrag in der Tabelle `benutzeradressen` hat.
    Hier das Sql-Statement, um aus beiden Tabellen die Daten zu bekommen:

    SQL
    SELECT
        `name`,
        `ort`
    FROM
        `benutzer`
    LEFT JOIN -- ~"hänge an" 
        `benutzeradressen` AS `adr` -- die tabelle als name `adr`
        ON (`benutzer`.id = `adr`.`benutzerid`) -- wenn zutrifft (was in klammern steht)


    Durch LEFT JOIN (also durch das LEFT) wird aus der ersten Tabelle trotzdem ein Datensatz geholt, auch wenn kein passender Datensatz in der zweiten Tabelle gefunden wurde.
    Die Felder sind dann mit NULL belegt


    EDIT: hier nochmal ein Bsp für Deine Tabellen



    SQL
    SELECT
        `Vorname`,
        `Name`,
        `Lieblingsessen`
    FROM
        `Tabelle1`
    LEFT JOIN 
        `Tabelle2` 
        USING (`id`)


    Ergebnis sollte sein:

    Code
    Tabelle1
    Vorname | Name  | Lieblingsessen
    -----------------
    hans    | Wurst | wurst
    steffan | bla   | sülz
    iknito  | usw   | NULL
  • Danke dir cottton, das du mir das ganze in einem Beispiel erklärt hast!


    Ich als Anfängerin, würde versuchen soviel wie möglich alles in eine Tabelle zu machen, da ich denke, da macht man weniger Fehler!
    Vor allem die Adressdaten, Benutzerwort, Passwort von einem Forum.


    Der Rest müsste ich mir noch überlegen es so zu machen, wie du es in deinem Beispiel beschrieben hast!


    Wenn jetzt einer mehre Lieblingsessen hat,
    Paprikawurst, Kartoffeln, Roterüben


    (Dann schreibt man das ganze in eine Zeile
    und macht nicht mehre Tabellen-Spalten oder Spalten-Zeilen ( oder wie man so was auch nennt!)


    ---------------


    Ich frage deswegen, weil ich daran anknüpfen möchte.


    Denn ich möchte eine Statistik machen können, wo z.B. hervorgeht:


    3 Besucher essen gerne Paprikawurst, 1 Kartoffeln, 1 Roten Rüben,


    Müsste man in diesem Fall alle Lebensmittel vorgeben, so das die Besucher nur noch ankreuzen müssen, um somit später eine Statistik machen zu können?


    Oder gibt es noch eine andere Möglichkeit?

  • Müsste man in diesem Fall alle Lebensmittel vorgeben, so das die Besucher nur noch ankreuzen müssen, um somit später eine Statistik machen zu können?


    Auf der/dem Seite/Formular - klar. Die Benutzer müssen doch irgendwo die Sachen auswählen können.
    (evtl hab ich die Frage nicht verstanden =)


    Zwecks Statistik:
    Es ist am Anfang nicht ganz einfach sich da rein zu denken. Ich versuchs garnicht erst groß zu erkären - ich zeigs besser mal:


    Tabelle `user` hält nun also die Grunddaten der Benutzer.
    Jeder Benutzer hat eine eindeutige `id` (PRIMARY KEY und AUTO_INCREMENT).
    In Tabele `user_auswahl` findest Du diese ids wieder. (sollten dort PRIMARY KEY und einzigartig sein, aber nicht AUTO_INCREMENT).
    Also steht fest: jeder Benutzer findet sich in der Tabelle `user_auswahl` mit seiner id wieder.


    Die Spalte `lieblingsessen_id` hat Zahlen als Werte (numerisch).
    Diese Zahlen sind auch wiederum ids. Und diese ids finden sich wiederum in der tabelle `lieblingsessen` wieder.
    Das heißt Du kannst Dir die Tabelle `lieblingsessen` wie die Tabelle `user` vorstellen. Jedes Essen (Eintrag) hat also eine id, welche in anderen Tabellen (zB `user_auswahl`) genutzt werden können, um sie "wieder zu finden".


    Wenn Du nun einfach in Tabelle `user` den Benutzer 2 auswählst, dann hat Benutzer 2:
    - den vorname: steffan
    - den name: bla
    - (Du suchst in Tabelle `user_auswahl` die id 2 und findest) die `lieblingsessen_id` 1
    - (und suchst in Tabelle `lieblingsessen` nach der `lieblingsessen`.`id` 1 und findest) das `lieblingsessen` Wurst.


    In einem Sql-Statement würde man ein SELECT in etwa so erstellen:


    Wenn Du jetzt auf der Seite eine Auswahl angeben wilslt,
    dann holst Du Dir alle verfügbaren Zeilen (Datensätze) aus der Tabelle `lieblingsessen`.
    Dadurch hast Du alle Lieblingsessen und ihre ids um zB ein Selectfeld (oder checkboxen) zu erstellen.


    Beim Speichern verwendest Du dann die ids, um sie in Tabelle `user_auswahl` abzulegen (speichern).



    Zu Statistik:
    Willst Du nun wissen wie viele Benutzer gerne Fisch essen, dann:
    - "guckst Du" in die Tabelle `user_auswahl`
    - siehst, dass Fisch die id 4 besitzt
    - suchst in Tabelle `user_auswahl` nach allen Benutzern, die als `lieblingsessen_id` die id 4 besitzen


    Ein Sql-Statement wäre in etwa:

    SQL
    SELECT  
        `name`,
        COUNT(`id`) AS `Anzahl`
    FROM
        `lieblingsessen`
    JOIN
        `user_auswahl` AS `user_wahl` 
        ON (`lieblingsessen`.`id` = `user_wahl`.`lieblingsessen_id`) 
    WHERE
        `lieblingsessen_id` = 4;


    mit Erklärung:
    am Anfang steht die Grundauswahl:

    SQL
    SELECT -- wähle aus:
        `name`, -- den namen
        COUNT(`id`) AS `Anzahl` -- und zähle die ids und nenne es (AS) `Anzahl`
    FROM -- von
        `lieblingsessen` -- allen vorkommenden speisen 
    WHERE -- wo
        `lieblingsessen_id` = 4; -- die speise die id 4 besitzt


    Jetzt mit dem JOIN:


    Damit hat Du dann zB die Anzahl der Benutzer, die als Lieblingsspeise Fisch angegeben hatten.


    Siehst kompliziert aus. Man muss sich aber einfach nur reindenken können - und das kommt mir der Zeit =)


    ich hoffen das war jetz nicht zu viel. kommt grad nix im Fernsehn =)

Jetzt mitmachen!

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