Zdá se, že chcete provést průnik pole, kromě toho, že vaše pole je jeden sloupec. Dá se to udělat, ale bude to pomalé, obtížně se to ladí a nebude to využívat sílu relačních databází. Lepším způsobem by bylo změnit schéma tabulky na něco takového:
Skupiny tabulek
group_id int unsigned not null auto_increment primary key,
character_list text
Tabulka members_in_group
group_id int unsigned not null,
group_member varchar(45) not null
Pak se můžete dotazovat takto:
SELECT group_id, character_list
FROM groups g
JOIN members_in_groups m USING (group_id)
WHERE m.group_member IN ('Mr. T', ...);
groups
tabulka je pravděpodobně velmi podobná vaší aktuální tabulce. members_in_groups
tabulka je stejná data rozdělená na snadno prohledávatelné části.
ETA vzhledem k vašemu komentáři by to mělo fungovat pokud můžete zaručit, že každý character_list
obsahuje pouze jeden instance každého znaku:
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;
V tomto případě HAVING
klauzule se musí rovnat 3, protože v IN ('Mr. T', 'Apollo', 'Rocky')
jsou 3 členové .