MySQL, как ограничение - PullRequest
       2

MySQL, как ограничение

1 голос
/ 20 мая 2011

В основном у меня в таблице есть строка, которая имеет следующий формат для значения - 1,2,3,4,10,11,21,34 и т. Д.

Я получаю значения с помощью оператора LIKE, но так как я использую его с%<value>%, при поиске 1 возвращается 11, 21, 1 и т. Д.

Как я могу ограничить его, чтобы возвращать значения на основе одного?

Ответы [ 4 ]

6 голосов
/ 20 мая 2011

Попробуйте строковую функцию find_in_set():

SELECT ...
FROM ...
WHERE FIND_IN_SET(somevalue, '1,2,3,4,10');

Обратите внимание, что это чисто функция MySQL, и ее нельзя нигде больше использовать, если не перепрыгивать через огромные обручи.

3 голосов
/ 20 мая 2011

Вместо col LIKE '%<value>%' do

col LIKE '%,<value>,%' OR col LIKE '<value>,%' OR col LIKE '%,<value>' OR col LIKE '<value>'

или еще лучше

col REGEXP '(.+,|^)<val>(,.+|$)'

Но лучшее решение - изменить структуру данных!Либо используйте тип SET, либо несколько полей, либо таблицу соединений.

1 голос
/ 20 мая 2011

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

I don't recommend it, но если вы изменили свои данные с 1,2,3,4,10,11,21,34 на ,1,2,3,4,10,11,21,34,, вы заметите, что каждое значение помечено с обеих сторон запятой, поэтому теперь вы можете искать %,<value>,%

1 голос
/ 20 мая 2011

Если вы хотите вернуть только конкретное совпадение, используйте = вместо LIKE. Like предназначен для возврата частичных совпадений, в отличие от =, который возвращает только определенные совпадения. Если вы просто хотите сопоставить первую часть, используйте%, но 11 все равно вернет 111, а не 211. Распространенная ошибка - использовать LIKE для всего, ИЛИ удалить %% вокруг аналогичного. Кроме того, действительно ли вы имеете в виду, что ЗНАЧЕНИЕ для строки в вашей базе данных MYSQL составляет 1,2,3,4,11,12 и т. Д.? И если да, то почему вы пытаетесь найти это значение на основе числа, которое в нем? Я думаю, вы будете искать подмножество целого, например,% 3,4,11% и т. Д. *

...