LukOnline Geschrieben 13. Oktober 2011 Teilen Geschrieben 13. Oktober 2011 Hallo Leute, irgendwie habe ich gerade eine Gehirn-Blockade: Ich programmiere an einem elektronischen Kochbuch und bin gerade am Suchfilter für das durchsuchen der Rezepte angelangt. http://lukonline.lu.funpic.de/hosting/suchfilter.png Folgender Sachverhalt (es geht erstmal nur im die Kategorien)! 1 Rezept kann zu m Kategorien gehören - 1 Kategorie kann n Rezepte haben -> m:n http://lukonline.lu.funpic.de/hosting/relation.png Nun soll der Benutzer mit den Radio-Buttons UND und ODER auswählen können, ob: - ODER: die Suchergebnisse (Rezepte) jeweils mindestens einer der gewählten Kategorien angehören sollen - UND: die Suchergebnisse (Rezepte) jeweils allen gewählten Kategorien angehören sollen. Für ODER habe ich das Statement formulieren können: SELECT Spalten FROM Tabellen WHERE ......... AND (rezepte_kategorien.KAT_ID = 1 OR rezepte_kategorien.KAT_ID = 6 OR rezepte_kategorien.KAT_ID = 3 OR ...) Es würden also alle Rezepte, die der KAT_ID 1 oder 6 oder 3 angehören betroffen sein. Nur bei UND habe ich Probleme: SELECT Spalten FROM Tabellen WHERE ......... AND (rezepte_kategorien.KAT_ID = 1 AND rezepte_kategorien.KAT_ID = 6 AND rezepte_kategorien.KAT_ID = 3 AND ...) Das wird wohl nicht funktionieren. Könnte mir hierbei vielleicht jemand einen Denkansatz geben? Vielen Dank schonmal- Gruß, Luk Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amenos Geschrieben 14. Oktober 2011 Teilen Geschrieben 14. Oktober 2011 Hi, ich würde statt mit AND und OR mit "IN" arbeiten. Da kannst ne Liste mit Werten übergeben ( where rezepte_kategorien.kat_id in (1,3,6) ). Versuchs mal so. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sacaldur Geschrieben 14. Oktober 2011 Teilen Geschrieben 14. Oktober 2011 ich denke, das wird nur mit SQL nicht möglich sein der ODER Fall lässt sich zwar machen (entweder so wie du es dir schon gedacht hast, oder mit dem genannten "... IN <Liste>", allerdings wird man ein Rezept mehrmals erhalten, wenn man mehr als 1 der Kategorien wählt, der dieses zugehörig ist der UND Fall würde mit deiner Abfrage gar nicht funktionieren mir fällt auch keine Alternative Abfrage ein, da man die auszuwertenden Daten über mehrere Datensätze verteilt erhält, sie für die Auswertung aber in einem Datensatz benötigen würde du musst diesen Teil also in deine Programmlogik packen (und von der Datenbank lediglich die verknüpften Datensätze der Tabellen holen) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LukOnline Geschrieben 14. Oktober 2011 Autor Teilen Geschrieben 14. Oktober 2011 Hallo Sacaldur, danke für deine Antwort Die doppelten Datensätze habe ich mit DISTINCT behoben. Wie würdest du das in der Programmlogik festhalten? - SELECT REZ_ID, KAT_ID FROM rezepte_kategorien WHERE KAT_ID = 1 OR KAT_ID = 6 OR ... - das ganze vllt in ein Array - wenn REZ_ID so oft vorkommt, wie KAT_IDs aus dem Form übergeben wuden, dann anzeigen Das könnte doch klappen oder? Das Problem ist nur, dass ich oben ja nur einen Ausschnitt meiner Abfrage gepostet habe. Die eigentliche Abfrage kann unter Umständen viel länger sein und wird im Programm dynamisch zusammengesetzt... Naja, kann man nur probieren. Oder fällt doch noch jemandem eine Lösung mit einer Abfrage ein? LG Luk Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.