Sie haben ein falsches Datenbankdesign und sollten sich etwas Zeit nehmen, um etwas über die Datenbanknormalisierung ( Wikipedia / Stackoverflow ) zu lesen .
Ich nehme an, Ihr Tisch sieht ungefähr so aus
TABLE
================================
| group_id | user_ids | name |
| 1 | 1,4,6 | group1 |
| 2 | 4,5,1 | group2 |
In Ihrer Tabelle mit Benutzergruppen stellt jede Zeile eine Gruppe dar, und in der user_idsSpalte haben Sie dieser Gruppe Benutzer-IDs zugewiesen.
Die normalisierte Version dieser Tabelle würde so aussehen
GROUP
=====================
| id | name |
| 1 | group1 |
| 2 | group2 |
GROUP_USER_ASSIGNMENT
======================
| group_id | user_id |
| 1 | 1 |
| 1 | 4 |
| 1 | 6 |
| 2 | 4 |
| ...
Dann können Sie einfach alle Benutzer mit zugewiesener Gruppe oder alle Benutzer in der Gruppe oder alle Benutzergruppen oder was auch immer Sie sich vorstellen können auswählen. Außerdem funktioniert Ihre SQL-Abfrage:
SELECT * FROM `group_user_assignment` WHERE user_id IN (1,2,3,4);
SELECT * FROM `group_user_assignment` t1
JOIN `group` t2 ON t2.id = t1.group_id
WHERE user_id IN (1,4);
SELECT * FROM `group_user_assignment` t1
JOIN `group` t2 ON t2.id = t1.group_id
WHERE t1.`user_id` = 1;
SELECT * FROM `group_user_assignment` t1
JOIN `group` t2 ON t2.id = t1.group_id
WHERE t1.`group_id` = 1;
SELECT COUNT(*) AS `groups_count` FROM `group_user_assignment` WHERE `user_id` = 1;
SELECT COUNT(*) AS `users_count` FROM `group_user_assignment` WHERE `group_id` = 1;
Auf diese Weise ist es auch einfacher, die Datenbank zu aktualisieren. Wenn Sie eine neue Zuordnung hinzufügen möchten, fügen Sie einfach eine neue Zeile ein group_user_assignment. Wenn Sie die Zuordnung entfernen möchten, löschen Sie einfach die Zeile in group_user_assignment.
In Ihrem Datenbankdesign müssten Sie zum Aktualisieren von Zuweisungen Ihren Zuweisungssatz aus der Datenbank abrufen, verarbeiten und aktualisieren und dann in die Datenbank zurückschreiben.
Hier ist sqlFiddle zum Spielen.
idals durch Kommata getrennte Liste oder etwas, mehrere Zeilen werden aus der Abfrage zurück.