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