Я что-то пробовал. Вот простой пример в SQL Fiddle: Example
Существует столбец someNumbers (номера, разделенные запятыми), и я попытался получить все строки, в которых этот столбец содержит определенный номер. Проблема в том, что результат содержит только строки, где someNumbers начинается с определенного числа.
Запрос SELECT * FROM myTable where 2 in ( someNumbers )
возвращает только строку с id 2, а не строку с id 1.
Какие-либо предложения? Спасибо вам всем.
Вы храните данные в неправильном формате! Вы не должны хранить несколько значений в одном столбце строки. Вы не должны хранить числа как строки. Вместо этого, вы должны иметь таблицу перехода с одной строкой на id
и за number
.
Иногда у вас просто нет выбора, потому что кто-то создал действительно плохо разработанную базу данных. В этих ситуациях MySQL имеет функцию find_in_set()
:
SELECT *
FROM myTable
WHERE find_in_set(2, someNumbers ) > 0;
Однако правильным решением является исправление модели данных.
В то время как Гордон ответ хороший, вот способ сделать это с like
SELECT * FROM myTable where someNumbers like '2,%' or someNumbers like '%,2,%' or someNumbers like '%,2'
Первый, like
проверяет, начинает ли ваш массив номер, который вы ищете (2). Второй проверяет, находится ли 2 в массиве и последние, like
тесты для внешнего вида в конце.
Обратите внимание, что запятые здесь важны, потому что что-то вроде '%2%'
также будет соответствовать ...,123,...
EDIT: Как было предложено OP, может случиться, что в строке присутствует только одно значение. Следовательно, запрос должен проверить этот случай, выполнив ... someNumbers = '2'
Select * from table_name where coloumn_name IN(value,value,value)
вы можете использовать его
Я бы предложил этот запрос:
SELECT * FROM myTable where someNumbers like '%2%'
Он будет выбирать каждую запись, в которой someNumbers содержит "2",