SQL Выберите запрос с FIND_IN_SET или что-нибудь еще, чтобы найти значения, разделенные запятыми, в столбце со значениями, разделенными запятыми

У меня есть один столбец со значениями, разделенными запятыми:

id Column_name
== ==========
1  value1,value2,value3,value5
2  value2,value3,value4
3  value1,value3,value5
4  value1,value2,value4,value5

Теперь мне нужен запрос, который получает все записи, имеющие value2 ИЛИ value4

Мне нужен запрос, как показано ниже, если это возможно:

SELECT * FROM table_name WHERE FIND_IN_SET('value2,value4',`column_name`) 

Таким образом, он вернет перекодирование с идентификатором 1,2,4 (имея value2 или value4)

У меня есть форма для пользователя, который отправляет value1,value2 ..etc из check_box

Как я могу оптимизировать мой выборочный запрос?


person user3068800    schedule 13.05.2014    source источник
comment
Вы не можете оптимизировать запрос, использующий строковые операции для поиска в списках. Вам необходимо правильно структурировать данные, используя таблицу соединений/ассоциаций.   -  person Gordon Linoff    schedule 13.05.2014


Ответы (1)


Используйте это так

SELECT * FROM table_name 
WHERE FIND_IN_SET('value2',column_name) > 0
or FIND_IN_SET('value4',column_name) > 0

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

На самом деле вам следует изменить структуру БД на что-то вроде этого

your_table
----------
id
name
other_columns


values table
------------
your_table_id
value
person juergen d    schedule 13.05.2014