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

0

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

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

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

Спасибо заранее, С Уважением, Jonas

Теги:
select
where

5 ответов

4
Лучший ответ

Посмотрите

FIND_IN_SET

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

  • 0
    Спасибо - это тот функционал, который я искал. Я просто забыл эту команду :)
1

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

  • 2
    Это не сработает, потому что он вернет его, будь то 50 или 5: S
  • 0
    Лучше укажите «%, 5,%», если вы ищете только «5», а не «25» или «51».
1

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

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

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

1
SELECT * FROM table WHERE field_in_table LIKE '%5'");

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

0
SELECT * 
FROM table 
WHERE FIELD LIKE '%,5,%' OR 
      FIELD LIKE '5,%' OR 
      FIELD LIKE '%,5'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню