Parece que desea hacer una intersección de matriz, excepto que su matriz es una sola columna. Se puede hacer, pero será lento, difícil de depurar y no aprovechará el poder de las bases de datos relacionales. Una mejor manera sería cambiar el esquema de su tabla a algo como esto:
Grupos de mesa
group_id int unsigned not null auto_increment primary key,
character_list text
Miembros de la tabla_en_grupo
group_id int unsigned not null,
group_member varchar(45) not null
Entonces puedes consultar así:
SELECT group_id, character_list
FROM groups g
JOIN members_in_groups m USING (group_id)
WHERE m.group_member IN ('Mr. T', ...);
Los groups
table es probablemente muy parecida a su mesa actual. Los members_in_groups
la tabla son los mismos datos divididos en partes fáciles de buscar.
ETA dado su comentario, esto debería funcionar si puede garantizar que cada character_list
contiene solo uno instancia de cada carácter:
SELECT group_id,
SUM(CASE m.group_member IN ('Mr. T', 'Apollo', 'Rocky') THEN 1 ELSE 0 END) AS tally,
character_list
FROM groups g
JOIN members_in_groups m ON (g.group_id=m.group_id)
GROUP BY group_id
HAVING SUM(CASE m.group_member IN ('Mr. T', 'Apollo', 'Rocky') THEN 1 ELSE 0 END) = 3;
En este caso el HAVING
la cláusula debe ser igual a 3 porque hay 3 miembros en IN ('Mr. T', 'Apollo', 'Rocky')
.