Hi!
hab mir das mit der n:m-Beziehung näher angeschaut.
(Wird eigentlich andersrum benannt, also m:n-Beziehung.)
So wie ich das jetzt verstanden habe, wäre die folgende Datenbank-Struktur besser geeignet.
Ja.
Und eine Abfrage wie diese:
select Produkte.ProduktId,ProduktName,ProduktPreis from Produkte,ProduktKategorie where Produkte.ProduktId=ProduktKategorie.ProduktId and ProduktKategorie.KategorieId in (10,11,14,20,21) group by ProduktKategorie.KategorieId order by ProduktPreis limit 30;
Was genau willst du abfragen? Die Abfrage, so wie du sie formuliert hast, geht nur mit MySQL, weil alle anderen DBMSe sich dagegen wehren, Felder anzufragen (in SELECT) über die nicht gruppiert oder eine Aggregatfunktion angewendet wurde. MySQL lässt das zu, nimmt dann aber irgendeinen undefinierten Datensatz. Die Abfrage dürfte also ein zufälliges Produkt aus jeder der Kategorien ergeben. Das LIMIT ist auch wirkungslos, weil nur 5 Kategorien gesucht werden.
Wenn du alle Produkte der vorgegebenen Kategorien haben möchtest, dann ist der erste Schritt, alle Produktnummern zu ermitteln:
SELECT ProduktId FROM ProduktKategorie WHERE KategorieId IN (10,11,14,20,21)
Jetzt kommt die Produkte-Tabelle ins Spiel:
SELECT angaben FROM Produkte WHERE ProduktId IN (...)
Anstelle der Punkte kommt die obige Abfrage in zusätzlichen ()-Klammern hin. Das ist dann eine Subquery, die braucht ihre eigenen Klammern und das IN() ebenfalls.
Lo!