Как сделать SELECT в mySQL по полю со списком значений
есть в таблице текстовое поле, в нем перечислены номера разделенные запятой, примерно так:
field_numbers '12,13,22,45'
Как сделать SELECT в mySQL по этому полю со списком значений что-то типа
select * from my_table where данное_значение присутствует в field_numbers
именно данное_значение - например, 1, то не должно найти потому как нет именно 1 (хотя 12 и 13 есть и в них есть цифра 1).
?
пс. в принципе это я так думаю, может задачу можно решить по-другому. Дело в том, что в поле field_numbers нужно как-то сохранить цифровые идентификаторы из другой таблицы, типа опции. Вариант связки 1-М в отдельной таблице не пойдет - база уже существует и курочить ее нельзя, а также в коде системы хотел бы обойтись минимумом изменений в многочисленных селектах. до этого в поле field_numbers сидел только 1 идентификатор и селект был просто на =...
field_numbers '12,13,22,45'
Как сделать SELECT в mySQL по этому полю со списком значений что-то типа
select * from my_table where данное_значение присутствует в field_numbers
именно данное_значение - например, 1, то не должно найти потому как нет именно 1 (хотя 12 и 13 есть и в них есть цифра 1).
?
пс. в принципе это я так думаю, может задачу можно решить по-другому. Дело в том, что в поле field_numbers нужно как-то сохранить цифровые идентификаторы из другой таблицы, типа опции. Вариант связки 1-М в отдельной таблице не пойдет - база уже существует и курочить ее нельзя, а также в коде системы хотел бы обойтись минимумом изменений в многочисленных селектах. до этого в поле field_numbers сидел только 1 идентификатор и селект был просто на =...
1 ответов
по-моему можно использовать функцию FIND_IN_SET:
select * from my_table where FIND_IN_SET( данное_значение, field_numbers)>0
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set
Первое, что пришло в голову. Наверно, можно и получше.
SELECT * FROM `my_table` WHERE `field_numbers` REGEXP '(^|[[:space:][:punct:]])1([[:space:][:punct:]]|$)'
Сделай маркер завершения номера, в данном случай запятая "12,13,22,45,"(и в конце тоже) и просто лайком можно выбрать.
SELECT * FROM `table` WHERE `field_numbers` LIKE '%22,%'