Tiene un diseño de base de datos incorrecto y debería tomarse un tiempo para leer algo sobre la normalización de la base de datos ( wikipedia / stackoverflow ).
Supongo que su mesa se parece a esto
TABLE
================================
| group_id | user_ids | name |
| 1 | 1,4,6 | group1 |
| 2 | 4,5,1 | group2 |
por lo que en su tabla de grupos de usuarios, cada fila representa un grupo y en la user_ids
columna tiene un conjunto de identificadores de usuario asignados a ese grupo.
La versión normalizada de esta tabla se vería así
GROUP
=====================
| id | name |
| 1 | group1 |
| 2 | group2 |
GROUP_USER_ASSIGNMENT
======================
| group_id | user_id |
| 1 | 1 |
| 1 | 4 |
| 1 | 6 |
| 2 | 4 |
| ...
Luego, puede seleccionar fácilmente todos los usuarios con un grupo asignado, o todos los usuarios del grupo, o todos los grupos de usuarios, o lo que se le ocurra. Además, su consulta SQL funcionará:
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;
De esta manera, también será más fácil actualizar la base de datos, cuando desee agregar una nueva asignación, simplemente inserte una nueva fila group_user_assignment
, cuando desee eliminar la asignación, simplemente elimine la fila group_user_assignment
.
En el diseño de su base de datos, para actualizar las asignaciones, tendría que obtener su conjunto de asignaciones de la base de datos, procesarlo y actualizarlo y luego volver a escribir en la base de datos.
Aquí está sqlFiddle para jugar.
id
como una lista separada por comas o algo así, varias filas se volverá de su consulta.