Поиск в столбце с массивом (value1, value2, …) в таблице sql

У меня есть таблица sql под названием «Offres»
внутри этой таблицы столбец с именем «регионы» имеет в нем массив (value1, value2, value3, …)
строка1: "35,2,15,69,98"
строка2: "7,9,15,5,69"
строка 3: "7,3,45,5,6"
как я могу искать строки, которые имеют несколько значений за одно и то же время
для exp: я хочу искать строки, в которых есть 15,69
результат должен отображать строки1 и строку2
благодаря

введите описание изображения здесь

Solutions Collecting From Web of "Поиск в столбце с массивом (value1, value2, …) в таблице sql"


для exp: я хочу искать строки, в которых есть 15,69


если вы можете добавить пробелы до и после ваших значений, тогда это может быть легко проверить скрипку

как

row1 :' 690 , 6969 , 069 , 69069 ' row2 :' 69 , 69 , 69 , 69 , 69 ' row3 :' 6969 , 69 , 69069 ' row4 :' 069 , 69069 ' row5 :' 69 ' SELECT * FROM Offres WHERE regions LIKE regions LIKE '% 69 %'; 

Никогда, никогда, никогда не храните несколько значений в одном столбце!

Как видите, это приведет только к проблемам. Сначала сначала нормализуйте структуру БД

 Offers id region 1 35 1 2 1 15 ... 2 7 2 9 2 15 ... 

Если вы хотите, чтобы поле было доступно для поиска через SQL, сохраните его как несколько строк и не сериализуйте его.

Если по каким-то причинам вам придется, вы можете извлечь каждую строку, десериализовать ее (для вашего случая, с explode() и соответствовать ей в отдельности, что требует большой вычислительной мощности.

Вы можете искать элементы в таких списках с помощью FIND_IN_SET (). Если вам нужно найти несколько записей в строках, вам нужно несколько выборок.

Но: Хорошие структуры баз данных избежали бы всего этого и имели бы только одну запись за строку вместо списков

Ради полноты я отправляю это как ответ тоже, поэтому он не заблуждается в огромной дискуссии в комментариях;)

Прежде всего, если вы хотите иметь несколько значений в одном столбце SQL, то столбец set – это путь. См. Например, здесь и здесь . Но если вы абсолютно не можете обойтись с несколькими значениями в одном столбце, и вы можете гарантировать, что они всегда будут встречаться в одном шаблоне (разделенные запятыми, без пробелов), тогда вы можете искать строки, содержащие 2 определенных таких значения, которые вы можете сделайте это так (согласно вашему примеру)

 SELECT * FROM Offres WHERE ( regions = '15' /*value is the only one in that row, obviously this is not necessary if you look for 2 values at once, but if you would only look for one value at once you MUST include it ;)*/ OR regions LIKE '%,15' /*value is the last value in that row*/ OR regions LIKE '15,%' /*value is the first value in that row*/ OR regions LIKE '%,15,%' /*value is a value somewhere in between other values in that row*/ ) AND ( regions = '69' /*value is the only one in that row, obviously this is not necessary if you look for 2 values at once, but if you would only look for one value at once you MUST include it ;)*/ OR regions LIKE '%,69' /*value is the last value in that row*/ OR regions LIKE '69,%' /*value is the first value in that row*/ OR regions LIKE '%,69,%' /*value is a value somewhere in between other values in that row*/ ) 

Вы также можете попробовать это в этой скрипке .