2015-02-04 5 views
0

Строка типа поля таблицы может содержать значения int, разделенные запятой, например. «1,6,2,13» или «3,9,2» или «1,3»Как проверить, содержит ли поле определенное значение в mysql?

Как выбрать все записи, содержащие, например. «3» не получает «13»?

A select * from table where field like '%3%' не будет работать в этом случае. Nor like '%,3,%

В настоящее время я пытаюсь использовать все комбинации: «3,%», «%, 3», «%, 3,%», но мне интересно, есть ли более простой способ.

+0

возможно дубликат [Как получить строку из таблицы, в которой столбец содержит некоторые value.?](http://stackoverflow.com/questions/28297830/how-to-get- row-of-table-in-which-column-contains-some-value) – Jens

+1

Хранение значений как csv - очень плохой дизайн базы данных. – Jens

ответ

1

LIKE не будет работать для точного поиска, лучше использовать Regex, чтобы получить точную Поиск

SELECT * FROM table WHERE 
    field REGEXP '[[<:]]3[[:>]]' 

Или вы можете также использовать функцию FIND_IN_SET()

SELECT * FROM tblname WHERE 
    FIND_IN_SET('3', field) > 0 

Примечание: FIND_IN_SET() функция не будет работать правильно, если метки не симметричны, разделенные запятыми, если теги имеют пробел между ними, тогда это создаст проблему

+0

Я не являюсь поклонником регулярных выражений, иногда может быть медленным. Но мне нравится функция FIND_IN_SET, эта функция мне неизвестна. – Klaus

+0

подробнее о функции 'find_in_set()' http://dev.mysql.com/doc/refman/5.0/ru/string-functions.html#function_find-in-set – Girish

0

Попробуйте использовать регулярные выражения, как:

SELECT * 
FROM table 
WHERE field REGEXP '^3,|,3,|,3$'; 
Смежные вопросы