joobie
Mitglied
Ich stehe vor diesem Problem und bin mit meinem MySQL-Latein ziemlich am Ende. Könnte mir einer von Euch Datenbank-Veteranen etwas weiterhelfen?
Folgende Situation (abstrahiert)
- es gibt eine Unmenge verschiedener Produktkategorien, auf die die Applikation zugreifen soll
- jede Kategorie enthält eine Unmenge verschiedener Produkte
- Produktkategorien werden laufend hinzugefügt
- Produkte werden laufend hinzugefügt
- die App hat verschiedene Bereiche, die jeweils eine bestimmte Gruppe von mehreren Kategorien umfasst (Elternkategorien)
- das Skript soll für jede Elternkategorie die letzten 30 Produkte aus allen (dieser Elternkategorie zugeordneten) Produktkategorien ziehen
Ich habe die DB-Struktur so angelegt, dass jede Produktkategorie eine eigene Tabelle ist, die die einzelnen Produkte enthält. Kommt irgendwann eine neue Produktkategorie hinzu, so wird eine neue Tabelle dafür angelegt, und dieser neue Tabellenname in der Elternkategorien-Tabelle der entsprechenden Elternkategorie zugeordnet.
Kompliziert, ich weiß
Wie würde ich so ein SELECT-Statement in PHP formulieren? Hier ist der logische Zusammenhang als einzelne queries:
1. Ziehe alle Produktkategorien (foreign IDs) der gegebenen Elternkategorie und schreibe sie in das PHP-Objekt $prod_cats:
2. Ziehe die letzten 30 Produkte aus jeder einzelnen dieser Produktkategorien:
Bei ca. 30-60 verschiedenen Produktkategorien pro Elternkategorie sind das dann im schlimmsten Fall 61 einzelne Datenbank-Queries. Das kann u.U. schon etwas dauern, würde ich sagen. Da muss es doch eine elegantere Methode geben, oder nicht? Z.B. mit einem Join, nur dass ich keine Ahnung habe, wie ich das mit dynamischen Produktkategorien hinkriegen soll. Und - habe ich die Datenbank für sowas überhaupt richtig angelegt?
In froher Erwartung - Danke im Voraus für jede Hilfe.
Folgende Situation (abstrahiert)
- es gibt eine Unmenge verschiedener Produktkategorien, auf die die Applikation zugreifen soll
- jede Kategorie enthält eine Unmenge verschiedener Produkte
- Produktkategorien werden laufend hinzugefügt
- Produkte werden laufend hinzugefügt
- die App hat verschiedene Bereiche, die jeweils eine bestimmte Gruppe von mehreren Kategorien umfasst (Elternkategorien)
- das Skript soll für jede Elternkategorie die letzten 30 Produkte aus allen (dieser Elternkategorie zugeordneten) Produktkategorien ziehen
Ich habe die DB-Struktur so angelegt, dass jede Produktkategorie eine eigene Tabelle ist, die die einzelnen Produkte enthält. Kommt irgendwann eine neue Produktkategorie hinzu, so wird eine neue Tabelle dafür angelegt, und dieser neue Tabellenname in der Elternkategorien-Tabelle der entsprechenden Elternkategorie zugeordnet.
Kompliziert, ich weiß
Wie würde ich so ein SELECT-Statement in PHP formulieren? Hier ist der logische Zusammenhang als einzelne queries:
1. Ziehe alle Produktkategorien (foreign IDs) der gegebenen Elternkategorie und schreibe sie in das PHP-Objekt $prod_cats:
Code:
SELECT prodcat FROM cats WHERE parentcat = 'office'
2. Ziehe die letzten 30 Produkte aus jeder einzelnen dieser Produktkategorien:
PHP:
$products = array();
foreach($prod_cats as $cat) {
$query = "SELECT * FROM $cat->prodcat ORDER BY id DESC LIMIT 30";
$products[] = $db->query($query);
}
Bei ca. 30-60 verschiedenen Produktkategorien pro Elternkategorie sind das dann im schlimmsten Fall 61 einzelne Datenbank-Queries. Das kann u.U. schon etwas dauern, würde ich sagen. Da muss es doch eine elegantere Methode geben, oder nicht? Z.B. mit einem Join, nur dass ich keine Ahnung habe, wie ich das mit dynamischen Produktkategorien hinkriegen soll. Und - habe ich die Datenbank für sowas überhaupt richtig angelegt?
In froher Erwartung - Danke im Voraus für jede Hilfe.