Usted tiene el diseño de bases de datos mal y debe tomar un tiempo para leer algo sobre la normalización de bases de datos (wikipedia/stackoverflow).
que asumen su mesa se ve algo como esto
TABLE
================================
| group_id | user_ids | name |
--------------------------------
| 1 | 1,4,6 | group1 |
--------------------------------
| 2 | 4,5,1 | group2 |
por lo que en la tabla de grupos de usuarios, cada fila representa un grupo y en user_ids
columna que haber un conjunto de identificadores de usuario asignados a ese grupo.
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 |
----------------------
| ...
A continuación, puede seleccionar fácilmente todos los usuarios con el grupo asignado, o todos los usuarios del grupo, o todos los grupos de usuario, o lo que usted puede pensar de. Además, la consulta SQL funcionará:
/* Your query to select assignments */
SELECT * FROM `group_user_assignment` WHERE user_id IN (1,2,3,4);
/* Select only some users */
SELECT * FROM `group_user_assignment` t1
JOIN `group` t2 ON t2.id = t1.group_id
WHERE user_id IN (1,4);
/* Select all groups of user */
SELECT * FROM `group_user_assignment` t1
JOIN `group` t2 ON t2.id = t1.group_id
WHERE t1.`user_id` = 1;
/* Select all users of group */
SELECT * FROM `group_user_assignment` t1
JOIN `group` t2 ON t2.id = t1.group_id
WHERE t1.`group_id` = 1;
/* Count number of groups user is in */
SELECT COUNT(*) AS `groups_count` FROM `group_user_assignment` WHERE `user_id` = 1;
/* Count number of users in group */
SELECT COUNT(*) AS `users_count` FROM `group_user_assignment` WHERE `group_id` = 1;
De esta manera, será también más fácil de actualizar la base de datos, cuando se desea añadir nueva asignación, simplemente inserta nueva fila en group_user_assignment
, cuando se quiere quitar la asignación simplemente elimine la fila en group_user_assignment
.
En el diseño de su base de datos, para actualizar las asignaciones, debe obtener su conjunto de tareas de la base de datos, procesarlo, actualizarlo y luego volver a escribir en la base de datos.
Aquí está sqlFiddle para jugar.
Por favor, publique un ejemplo de las filas que no devuelven correctamente esta consulta. Suponiendo que no está almacenando el 'id' como una lista separada por comas o algo así, varias filas _resolverán_ de su consulta. –
bien, es una lista separada por comas, por ejemplo = my3QL no devolverá mySQL. Veo el problema, se trata de la coma, pero ¿cómo podría hacerlo? – netcase
@ user762683, ¿Utiliza un nombre de perfil adecuado? y ¿cuál es el tipo de datos de este 'id', varchar o set o enum? – Starx