MySQL ВЫБЕРИТЕ, ГДЕ 'a' IN (`field`) - PullRequest
       18

MySQL ВЫБЕРИТЕ, ГДЕ 'a' IN (`field`)

0 голосов
/ 17 сентября 2010

Я знаю, что неуместно использовать структуру таблицы MySQL как таковую, но я должен работать с такой.Проблема состоит в том, что поле в таблице имеет значение с целыми числами, разделенными запятыми, например «1,3,5,7,10», и я хочу, чтобы запрос возвращал строки, в которых field имеет значение, переданное запросу в числоэто, например:

SELECT * FROM `table` WHERE '5' IN (`field_in_table`)

Однако, это не работает, если в этом случае '5' не является первым числом в поле.Любые советы, как решить это?

Заранее спасибо, С уважением, Джонас

Ответы [ 5 ]

4 голосов
/ 17 сентября 2010

Посмотрите на

FIND_IN_SET

Возвращает значение в диапазоне от 1 до N если строка str находится в строке список strlist, состоящий из N подстроки. Список строк - это строка состоит из подстрок, разделенных "," персонажи. Если первый аргумент постоянная строка, а вторая столбец типа SET, Функция FIND_IN_SET () оптимизирована для использовать битовую арифметику. Возвращает 0, если str отсутствует в strlist или если strlist является пустая строка.

1 голос
/ 17 сентября 2010
SELECT * FROM table WHERE field_in_table LIKE '%5'");

должно работать

1 голос
/ 17 сентября 2010

Вы можете попробовать

SELECT *
    FROM table
    WHERE '%,5,%' LIKE field_in_table OR
          '%,5'   LIKE field_in_table OR
          '5,%'   LIKE field_in_table;

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

1 голос
/ 17 сентября 2010

Вместо этого вы можете использовать WHERE field_in_table LIKE '%5%'.Конечно, проблема была бы в том, что «1,59,98» также вернулось бы.

0 голосов
/ 17 сентября 2010
SELECT * 
FROM table 
WHERE FIELD LIKE '%,5,%' OR 
      FIELD LIKE '5,%' OR 
      FIELD LIKE '%,5'
...