dedlfix: MySQL SELECT Abfrage gesucht

Beitrag lesen

Tach!

Wie würdet Ihr das lösen? Irgendwas in die Richtung … WHERE FIND_IN_SET(…) … vielleicht?

Ja. Das einzige was noch ginge, wäre Stringverarbeitung. Alles beides ist aber nur bei kleinen Datenmengen akzeptabel, weil für die Suche kein Index verwendet werden ksnn und somit immer die gesamten Tabellen durchsucht werden müssen.

Zudem musst du pro User-Gruppe eine eigene Abfrage stellen, weil es kein FIND_IN_SET() mit mehreren zu suchenden Werten gibt.

Oder soll ich eine völlig andere Tabellenstruktur nehmen?

Besser wäre das. Ordentliche Relationen in einem relationalen DBMS lassen sich besser handhaben als Teilstring-Relationen (oder Teilwerte in Feldern).

Mit extra User-Gruppen- und Gruppen-Artikel-Tabellen (jeweils m:n-Beziehung) kann man eine Abfrage mit zwei geschachtelten Subquerys (oder drei, wenn man vom Usernamen statt der ID ausgeht) schreiben: Wähle alle Artikel, deren ID sich in den Artikel-IDs der Artikel-Gruppentabelle befindet, deren Gruppen-IDs sich in der auf die User-ID eingeschränkte Menge der IDs der User-Gruppentabelle befindet. Oder villeicht etwas einfacher formuliert, von innen nach außen: Wähle alle Gruppen-IDs aus der User-Gruppentabelle für die User-ID des gesuchten Users. Wähle alle Artikel-IDs aus der Artikel-Gruppen-Tabelle deren Gruppen-ID in der Ergebnismenge der vorhergehenden Abfrage ist. Wähle alle Artikel, deren ID in der Ergebnismenge der vorherigen Frage ist.

dedlfix.