lixx: mySQL: Nach kommaseperiete Einträgen suchen

Beitrag lesen

Hi Ilja,

erstmal danke für Deine Hilfe.

zum einen ist der hinweis von hamster ganz wichtig, nämlich eine dritte beziehungstabelle zu bilden. dann hättest du jetzt erst gar nicht diese probleme.

Na ja. Am Anfang dachte ich mir das auch. Aber dann habe ich mich an Typo3 orientiert, wo die Gruppen auch als kommaseperiete Einträge in das Feld geschrieben werden. Ich dachte, die wissen schon was sie tun ;)

wobei es immer interessant ist, die version deines dbms zu kennen:

MySQL 4.0.20

SELECT    u.*
FROM      users AS u
LEFT JOIN groups AS g ON (g.id NOT IN (u.groups_id))
WHERE     u.groups_id = ''
OR        g.id IS NULL

aber nun zu Deiner Abfrage. Sieht im ersten Moment richtig aus, funktioniert aber leider nicht. Es werden noch immer Datensätze ausgegeben, die noch eine vorhandene Gruppe haben. Z.B:

u.groups_id = 264,267,266,268,269,270,271

... und sagen wir mal die Gruppen mit der id 264,271 existieren noch und die Gruppen mit der id 267,266,268,269,270 existieren nicht mehr.

Moment. Jetzt ist mir noch was eingefallen:

SELECT *
FROM users AS u
LEFT JOIN groups AS g ON ( FIND_IN_SET( g.id, u.groups_id ) )
WHERE u.groups_id = '' OR g.id IS NULL

Das funktioniert soweit einmal. Wobei ich es aber nicht verstehen kann. In der LEFT JOIN-Zeile werden doch alle user gesucht, bei denen sich eine g.id im Feld u.groups_id befinden. Im Grunde genommen genau das Gegenteil, von dem was ich will. Und die WHERE-Klausel sucht auch nur ob die Feler leer sind. Aber wo kommt dann die richtige Ausgabe her?

lg lixx