Выберите строки, где любое из значений поля соответствует значениям из массива - PullRequest
0 голосов
/ 11 марта 2020

У меня довольно сложная задача. Мне нужно выбрать строки, которые соответствуют любому значению массива - НО поле также содержит много значений, разделенных запятыми.

$teamlist = "25,26,27,28,29,30"

MYSQL-Row 1 = "26,29,31,35,36"
MYSQL-Row 2 = "30,31,32,36,39"
MYSQL-Row 3 = "31,35,36,37,38"
MYSQL-Row 4 = "23,26,29,30,31"

В результате должны быть выбраны строки 1, 2 и 4.

Я пробовал что-то вроде:

mysqli_query($con,"SELECT * FROM user_meta WHERE team IN '".$ids."'");

Но это работает, только если поля содержат только один идентификатор, а не несколько. Я застрял. Есть идеи?

Спасибо!

1 Ответ

1 голос
/ 11 марта 2020

Вы можете передать ваши параметры как производную таблицу, а затем использовать find_in_set() для поиска в столбце csv:

select t.*
from mytable t
inner join (
    select 25 team_id
    union all select 26
    union all select 27
    ...
) x on find_in_set(x.team_id, t.team)

Это оставит вам работу по созданию производной таблицы из вашего приложения. В самых последних версиях MySQL оператор VALUES() облегчает задачу:

select t.*
from mytable t
inner join (values row(26),row(27), ...) x(team_id)
    on find_in_set(x.team_id, t.team)

Однако вы должны не хранить списки в колонке базы данных. Это вредно во многих отношениях, как объяснено в этом знаменитом SO-ответе . Вы должны хранить каждое значение каждого списка в отдельной строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...