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)
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:
tabelle `benutzer`
id name
--------
1 hans
2 dude
3 iknito
tabelle `benutzeradressen`
benutzerid plz ort
1 12345 dort
2 87111 hier
Alles anzeigen
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:
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
Tabelle1
id Vorname | Name
------------------
1 hans | Wurst
2 steffan | bla
3 iknito | usw
Tabelle2
id Lieblingsessen
1 wurst
2 sülz
Alles anzeigen
Ergebnis sollte sein:
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`
id vorname | name
------------------
1 hans | Wurst
2 steffan | bla
3 iknito | usw
tabelle `user_auswahl`
id lieblingsessen_id | ect | ect
----------------------|-----|----
1 | 2 |
2 | 1 |
3 | 4 |
tabelle `lieblingsessen`
id | name
-----------
1 | Wurst
2 | Brot
3 | Salat
4 | Fisch
Alles anzeigen
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:
SELECT
*
FROM
`user`
LEFT JOIN
`user_auswahl` AS `essenid`
ON (`user`.`id` = `essenid`.`id`)
LEFT JOIN
`lieblingsessen` AS `essen`
ON (`essen`.`id` = `essenid`.`id`)
WHERE
`vorname` = 'steffan';
Alles anzeigen
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:
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:
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:
SELECT -- wähle aus:
`name`, -- den namen
COUNT(`user_wahl`.`id`) AS `Anzahl` -- und zähle die ids und nenne es (AS) `Anzahl`
FROM -- von
`lieblingsessen` -- allen vorkommenden speisen
JOIN -- und nutze dabei die tabelle
`user_auswahl` AS `user_wahl` -- `user_auswahl` ALS bezeichner `user_wahl`
ON -- wo
-- die `lieblingsessen`.`id` gleich der `user_wahl`.`lieblingsessen_id` ist
(`lieblingsessen`.`id` = `user_wahl`.`lieblingsessen_id`)
WHERE -- aber nur dort wo
`lieblingsessen_id` = 4; -- die speise die id 4 besitzt
Alles anzeigen
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 =)
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!
HTML-Seminar.de - mit Videos zum schnellen Lernen, wie man eine Website selbst erstellt.