Как получить запись, где find_in_set из строки с запятой. [MySql] - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть строка, разделенная запятыми, например, "1,2,3", и столбец в таблице также содержит значение, разделенное запятыми, например, "1,2,4,5,3", как получить все записи, которые соответствуют любому значениюлюбое значение.

например

  • id --- категория
  • 1 --- 1,2,4,5
  • 2 --- 1, 2,3,6
  • 3 --- 2,3,5

Если я ищу строку "1,2,3", то я должен получить запись, содержащую категорию1 или 2 или 3 или 1,2 или 1,3 или 2,3 или 1,2,3.Он не должен возвращать дублирующиеся значения, где мы можем сгруппировать их.

Возможно ли получить все записи одним запросом.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Вы не должны хранить списки идентификаторов в строках.Вот причины, по которым:

  • Значения должны храниться с использованием правильного типа.int <> string.
  • SQL имеет паршивые функции обработки строк.
  • Внешние ключи должны быть правильно объявлены.
  • SQL не сможет оптимизировать эти запросы.
  • В SQL есть отличный способ хранить списки.Это называется таблица , а не строка .

Но иногда вы застряли с кем-то другим, действительно, действительно, действительно, очень, очень плохими данными.модельные решения.Вы можете сделать что-то, используя регулярные выражения:

where category regexp replace($string, ',', '|')

или, возможно, более точно:

where concat(',', category, ',') regexp concat(',', replace($string, ',', ',|,'), ',')
0 голосов
/ 25 сентября 2018

Попробуйте это:

select * from table where category IN (1,2,3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...