У вас неправильный дизайн базы данных, и вам следует найти время, чтобы прочитать что-нибудь о нормализации базы данных ( wikipedia / stackoverflow ).
Я предполагаю, что ваша таблица выглядит примерно так
TABLE
================================
| group_id | user_ids | name |
| 1 | 1,4,6 | group1 |
| 2 | 4,5,1 | group2 |
поэтому в вашей таблице групп пользователей каждая строка представляет одну группу, а в user_ids
столбце у вас есть набор идентификаторов пользователей, назначенных этой группе.
Нормализованная версия этой таблицы будет выглядеть так
GROUP
=====================
| id | name |
| 1 | group1 |
| 2 | group2 |
GROUP_USER_ASSIGNMENT
======================
| group_id | user_id |
| 1 | 1 |
| 1 | 4 |
| 1 | 6 |
| 2 | 4 |
| ...
Затем вы можете легко выбрать всех пользователей с назначенной группой, или всех пользователей в группе, или все группы пользователей, или что угодно. Кроме того, ваш sql-запрос будет работать:
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;
Таким образом, также будет проще обновить базу данных: когда вы хотите добавить новое назначение, вы просто вставляете новую строку group_user_assignment
, когда вы хотите удалить назначение, вы просто удаляете строку в group_user_assignment
.
В проекте базы данных, чтобы обновить назначения, вам нужно будет получить набор назначений из базы данных, обработать и обновить, а затем записать обратно в базу данных.
Вот sqlFiddle, с которым можно поиграть.
id
как список, разделенный запятыми, или что-то в этом роде, из вашего запроса будет возвращено несколько строк .