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 =)