Zum Inhalt springen

[MySQL] m:n SELECT Problem


LukOnline

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...