Masz nieprawidłowy projekt bazy danych i powinieneś poświęcić trochę czasu na przeczytanie czegoś o normalizacji bazy danych ( wikipedia / stackoverflow ).
Zakładam, że twój stół wygląda mniej więcej tak
TABLE
================================
| group_id | user_ids | name |
| 1 | 1,4,6 | group1 |
| 2 | 4,5,1 | group2 |
więc w Twojej tabeli grup użytkowników każdy wiersz reprezentuje jedną grupę, aw user_idskolumnie masz zestaw identyfikatorów użytkowników przypisanych do tej grupy.
Tak wyglądałaby znormalizowana wersja tej tabeli
GROUP
=====================
| id | name |
| 1 | group1 |
| 2 | group2 |
GROUP_USER_ASSIGNMENT
======================
| group_id | user_id |
| 1 | 1 |
| 1 | 4 |
| 1 | 6 |
| 2 | 4 |
| ...
Następnie możesz łatwo wybrać wszystkich użytkowników z przypisaną grupą lub wszystkich użytkowników w grupie, wszystkie grupy użytkowników lub cokolwiek przyjdzie Ci do głowy. Również twoje zapytanie sql będzie działać:
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;
W ten sposób łatwiej będzie również zaktualizować bazę danych, gdy chcesz dodać nowe przypisanie, po prostu wstaw nowy wiersz group_user_assignment, a jeśli chcesz usunąć przypisanie, po prostu usuwasz wiersz group_user_assignment.
W projekcie bazy danych, aby zaktualizować przypisania, należałoby pobrać zestaw przydziałów z bazy danych, przetworzyć go i zaktualizować, a następnie zapisać z powrotem w bazie danych.
Oto sqlFiddle do zabawy.
idjako listę oddzielonych przecinkami lub czegoś, wiele wierszy będzie powrócić z zapytaniem.