поиск разделенных запятыми значений в mysql с помощью php

У меня небольшая проблема с запуском запроса select в базе данных. Некоторые данные хранятся в виде списка значений, разделенных запятыми, например:

Таблица: example_tbl

| Id | standardid | subjectid  |
| 1  | 1,2,3    |  8,10,3  |
| 2  | 7,6,12   |  18,19,2 |
| 3  | 10,11,12 |  4,3,7   |

И пример того, что я пытаюсь запустить:

select * from table where standardid in (7,10) and subjectid in (2,3,4)
select * from table  where FIND_IN_SET(7,10,standardid)  and FIND_IN_SET(2,3,4,subjectid)

Заранее спасибо за все, что вы можете мне сказать.

1 ответ

  1. значения, разделенные запятыми в базе данных, по своей сути проблематичны и неэффективны, и гораздо, гораздо лучше нормализовать дизайн базы данных; но если вы проверяете синтаксис для FIND_IN_SET (), он ищет одно значение в наборе, а не соответствует нескольким значениям в наборе.

    Чтобы использовать его для нескольких значений, необходимо использовать функцию несколько раз:

    select * from table
     where (FIND_IN_SET(7,standardid)
         OR FIND_IN_SET(10,standardid))
       and (FIND_IN_SET(2,subjectid)
         OR FIND_IN_SET(3,subjectid)
         OR FIND_IN_SET(4,subjectid))