SQL: как выбрать строки, в которых идентификатор находится в строке, разделенной запятыми?

#mysql #sql #arrays #string #select

Вопрос:

Я думаю, что совершил большую ошибку, и я не могу понять, как это сделать:

У меня есть таблица со списком комнат и элементов столбца (varchar), содержащая список принятых идентификаторов участников, разделенных запятыми (например, 1,2,15,1000)

Мне нужно выбрать все комнаты, где идентификатор В строке участников. Есть идеи??? Что-то вроде

 SELECT * FROM rooms WHERE id IN rooms.members
 

(Я знаю, что это не сработает, но надеюсь, я объяснился^^’)

РЕДАКТИРОВАТЬ
Мне нужно выполнить sql-запрос с PDO на PHP, я использую MySQL, и цель состоит в том, чтобы получить список всех строк, в которых идентификатор указан в строке списка участников

Комментарии:

1. Пожалуйста, укажите свою СУБД с версией.

2. я должен выполнить sql-запрос с помощью php, зачем вам нужна моя СУБД? в любом случае, это MySQL

3. Это MySQL 8 или любая более старая версия?

4. СУБД @Chris важна, потому что SQL зависит от поставщика (а иногда и от версии). Любой ответ должен будет учитывать вашу базу данных. Клиент (php здесь) — это то, что часто не имеет отношения к движку БД.

Ответ №1:

В MySQL вы можете использовать Find_in_set() для выполнения своей работы:

ДБ-Скрипка:

  create table test (id int, studentIDs  varchar(50));
 insert into test values(1,'1,2,3');
 create table student (id int, name  varchar(50));
 insert into student values(1,'A');
 insert into student values(2,'B');
 

Запрос:

  select * from student where find_in_set(id,(select studentids from test))
 

Выход:

ID Имя
1 A
2 B

бд<>скрипка <>здесь

Если вы используете sql server 2016 или выше, то можете использовать string_split()

ДБ-Скрипка:

  create table test (id int, studentIDs  varchar(50));
 insert into test values(1,'1,2,3');
 create table student (id int, name  varchar(50));
 insert into student values(1,'A');
 insert into student values(2,'B');
 

Запрос:

  select * from student where id in (select trim(value) from test cross apply string_split(studentids,','))
 

Выход:

ID Имя
1 A
2 B

бд<>скрипка <>здесь

Комментарии:

1. я использую MySQL :/

2. @Chris Я добавил ответ для MySQL.

3. Я только что сам нашел решение благодаря вашим советам, и оно было таким же! Большой палец вверх для тебя!

4. Это просто здорово. Голосуйте за ваши усилия. Наилучшие пожелания.