Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[MySQL] m:n SELECT Problem

Empfohlene Antworten

Veröffentlicht

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

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)

  • Autor

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.