Изглежда, че искате да направите пресичане на масив, освен че вашият масив е една колона. Може да се направи, но ще бъде бавно, трудно за отстраняване на грешки и няма да използва силата на релационните бази данни. По-добър начин би бил да промените схемата на таблицата си на нещо подобно:
Групи от таблици
group_id int unsigned not null auto_increment primary key,
character_list text
Таблица members_in_group
group_id int unsigned not null,
group_member varchar(45) not null
След това можете да направите заявка по следния начин:
SELECT group_id, character_list
FROM groups g
JOIN members_in_groups m USING (group_id)
WHERE m.group_member IN ('Mr. T', ...);
groups
таблицата вероятно много прилича на текущата ви таблица. members_in_groups
таблицата е едни и същи данни, нарязани на лесни за търсене части.
Предварителното време, като се има предвид вашия коментар, това трябва да работи if можете да гарантирате, че всеки character_list
съдържа само един екземпляр на всеки знак:
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;
В този случай HAVING
клаузата трябва да е равна на 3, защото има 3 члена в IN ('Mr. T', 'Apollo', 'Rocky')
.