Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > выборка на сонове части строки


Автор: Pokoinik 27.11.2007, 16:44
есть поле таблицы в которой хранится инфа вида 1,2,35,546,65,3,345
мне, к примеру нужно вырбрать все строки содержащие число 3

Автор: igorold 27.11.2007, 16:48
если поле текстовое, то используйте LIKE:
Код

where `Поле` like '%3%'

Автор: skyboy 27.11.2007, 16:55
igorold, я так понимаю, что автору темы надо не цифру "3" в любом месте, а чтоб именно было ",3," - то есть отделенное от остальных число. т.е. приведенное тобой условие сработает и для строки "33,78,13,23". кроме того, работать с шаблонами("%" при использовании like) - заведомо медленнее, чем использовать locate.
т.е. по требуемой задаче подойдет такой вариант:
Код

WHERE LOCATE(',3,',CONCAT(',',CONCAT(`some_field`,',')))> 0

Но вообще-то, если подобный поиск будет проихсодить довольно часто - было бы разумнее привести структуру БД к http://ru.wikipedia.org/wiki/Нормальная_форма.

Добавлено через 2 минуты и 42 секунды
пояснение к коду: сначала мы добавляем к строке спереди исзади по запятой, чтоб строка была однотипной, независимо от того - вначале находится искомое число или в середине(в начальных условиях первое число в строке отделено запятой только с одной стороны, последнее число - тоже только с одной, а остальные числа отделены запятыми с обоих сторон; преобразованная строка - CONCAT(',',CONCAT(`some_field`,',')) - избавлена от того недостатка: все числа отделены от соседей с обоих сторон). После преобразование мы можем искать необходимое нам число, указав, что справа и слева отнего обязательно должны быть запятые.

Добавлено через 2 минуты и 59 секунд
впрочем, нормализация в данном случае должна рулить...

Автор: Pokoinik 27.11.2007, 17:03
skyboy, совершенно верно...
+1

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)