Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да сравним два разделени със запетая низови списъка с помощта на MySQL

Изглежда, че искате да направите пресичане на масив, освен че вашият масив е една колона. Може да се направи, но ще бъде бавно, трудно за отстраняване на грешки и няма да използва силата на релационните бази данни. По-добър начин би бил да промените схемата на таблицата си на нещо подобно:

Групи от таблици

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') .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да проверя дали mysqli_query е изтрил редове

  2. Попълване на падащи менюта с MySQL записи

  3. mysql oledb драйвер

  4. PHP списък на потребители от SQL база данни в таблица

  5. Създаване на съхранена процедура:настройка на набора от символи и сортиране