| | | | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | ||
| Erfahrener Benutzer Registriert seit: 02.04.2008
Beiträge: 4.032
![]() | Zitat:
Tabelle Kategorie: id, // Primärschlüssel name Tabelle Artikel: id, // Primärschlüssel artname, beschreibung, breis Tabelle ArtikelKategorie art_id, // Fremdschlüssel kat_id // Fremdschlüssel Die beiden id's bilden dann gemeinsam den Primärschlüssel. Hier findest du eine kurze Beschreibung des entsprechenden Datenbank-Designs
__________________ Gruss L | |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 05.09.2007
Beiträge: 5.044
![]() | Nehmen wir mal an, Du hast die Datensätze Code: INSERT INTO kategorien (id, name) VALUES (1, "Kat A"), (2, "Kat B"); INSERT INTO artikel (id, name, beschreibung, preis) VALUES (1, "Artikel X", "...", 10), (2, "Artikel Y", "...", 20); INSERT INTO artikelkategorien (id_artikel, id_kategorie) VALUES (1, 1), (1, 2), (2, 2) Die Verbindung stellst Du per JOIN her. Erstmal die "Basisabfrage" Code: SELECT * FROM artikel Jetzt kommt der "magische Teil" Code: SELECT * FROM artikel JOIN artikelkategorien ON artikel.id = artikelkategorien.id_artikel Erster Datensatz aus artikel: (artikel.id=1, "Artikel X", "...", 10) Wird vergleichen mit (artikel_id=1, 1), passt, Ergebnis (artikel.id=1, "Artikel X", "...", 10, artikel_id=1, kategorie_id=1) Wird vergleichen mit (artikel_id=1, 2), passt, Ergebnis (artikel.id=1, "Artikel X", "...", 10, artikel_id=1, kategorie_id=2) Wird vergleichen mit (artikel_id=2, 1), passt nicht, Datensatz fliegt raus Zweiter Datensatz aus artikel: (artikel.id=2, "Artikel Y", "...", 20) Wird vergleichen mit (artikel_id=1, 1), passt nicht Wird vergleichen mit (artikel_id=1, 2), passt nicht Wird vergleichen mit (artikel_id=2, 2), passt, Ergebnis (artikel.id=2, "Artikel Y", "...", 10, artikel_id=2, kategorie_id=2) Das (interne) Ergbnis sieht also so aus: (artikel.id=1, "Artikel X", "...", 10, artikel_id=1, kategorie_id=1) (artikel.id=1, "Artikel X", "...", 10, artikel_id=1, kategorie_id=2) (artikel.id=2, "Artikel Y", "...", 10, artikel_id=2, kategorie_id=2) - Erstmal sacken lassen - Das sind auch wieder Datensätze (jedenfalls kann man sie als solche betrachten), nennen wir sie "Zwischenergebnis". Und die kann man wieder über JOIN mit anderen Datensätzen verknüpfen Code: SELECT * FROM artikel JOIN artikelkategorien ON artikel.id = artikelkategorien.id_artikel JOIN kategorien ON kategorien.id = artikelkategorien.id_kategorie Vergleiche für das erste Zwischenergebnis: (artikel.id=1, "Artikel X", "...", 10, artikel_id=1, kategorie_id=1) und (1, "Kat A") passt. (artikel.id=1, "Artikel X", "...", 10, artikel_id=1, kategorie_id=1) und (2, "Kat B") passt nicht. Vergleiche für das zweite Zwischenergebnis: (artikel.id=1, "Artikel X", "...", 10, artikel_id=1, kategorie_id=2) und (1, "Kat A") passt nicht. (artikel.id=1, "Artikel X", "...", 10, artikel_id=1, kategorie_id=2) und (2, "Kat B") passt. Vergleiche für das dritte Zwischenergebnis: (artikel.id=2, "Artikel Y", "...", 10, artikel_id=2, kategorie_id=2) und (1, "Kat A") passt nicht. (artikel.id=2, "Artikel Y", "...", 10, artikel_id=2, kategorie_id=2) und (2, "Kat B") passt. Ergebnis: (artikel.id=1, "Artikel X", "...", 10, artikel_id=1, kategorie_id=1, kategorien.id=1, kategorien.name="Kat A") (artikel.id=1, "Artikel X", "...", 10, artikel_id=1, kategorie_id=2, kategorien.id=2, kategorien.name="Kat B") (artikel.id=2, "Artikel Y", "...", 10, artikel_id=2, kategorie_id=2, kategorien.id=2, kategorien.name="Kat B") Aus diesem internen Ergebnis kannst Du dann diejenigen Felder auswählen, die Dir MySQL liefern soll Code: SELECT artikel.id, artikel.name, artikel.beschreibung, artikel.preis, kategorien.name FROM artikel JOIN artikelkategorien ON artikel.id = artikelkategorien.id_artikel JOIN kategorien ON kategorien.id = artikelkategorien.id_kategorie Geändert von David (06.01.2009 um 13:31 Uhr). |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|