Il semble que vous vouliez faire une intersection de tableau, sauf que votre tableau est une seule colonne. Cela peut être fait, mais ce sera lent, difficile à déboguer et n'exploitera pas la puissance des bases de données relationnelles. Une meilleure façon serait de changer le schéma de votre table en quelque chose comme ceci :
Groupes de tableaux
group_id int unsigned not null auto_increment primary key,
character_list text
Tableau members_in_group
group_id int unsigned not null,
group_member varchar(45) not null
Ensuite, vous pouvez interroger comme ceci :
SELECT group_id, character_list
FROM groups g
JOIN members_in_groups m USING (group_id)
WHERE m.group_member IN ('Mr. T', ...);
Les groups
table ressemble probablement beaucoup à votre table actuelle. Les members_in_groups
table est la même donnée découpée en parties facilement consultables.
ETA compte tenu de votre commentaire, cela devrait fonctionner si vous pouvez garantir que chaque character_list
n'en contient qu'un instance de chaque caractère :
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;
Dans ce cas, le HAVING
la clause doit être égale à 3 car il y a 3 membres dans IN ('Mr. T', 'Apollo', 'Rocky')
.