| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MySQL > выборка на сонове части строки |
| Автор: Pokoinik 27.11.2007, 16:44 |
| есть поле таблицы в которой хранится инфа вида 1,2,35,546,65,3,345 мне, к примеру нужно вырбрать все строки содержащие число 3 |
| Автор: igorold 27.11.2007, 16:48 | ||
если поле текстовое, то используйте LIKE:
|
| Автор: skyboy 27.11.2007, 16:55 | ||
| igorold, я так понимаю, что автору темы надо не цифру "3" в любом месте, а чтоб именно было ",3," - то есть отделенное от остальных число. т.е. приведенное тобой условие сработает и для строки "33,78,13,23". кроме того, работать с шаблонами("%" при использовании like) - заведомо медленнее, чем использовать locate. т.е. по требуемой задаче подойдет такой вариант:
Но вообще-то, если подобный поиск будет проихсодить довольно часто - было бы разумнее привести структуру БД к http://ru.wikipedia.org/wiki/Нормальная_форма. Добавлено через 2 минуты и 42 секунды пояснение к коду: сначала мы добавляем к строке спереди исзади по запятой, чтоб строка была однотипной, независимо от того - вначале находится искомое число или в середине(в начальных условиях первое число в строке отделено запятой только с одной стороны, последнее число - тоже только с одной, а остальные числа отделены запятыми с обоих сторон; преобразованная строка - CONCAT(',',CONCAT(`some_field`,',')) - избавлена от того недостатка: все числа отделены от соседей с обоих сторон). После преобразование мы можем искать необходимое нам число, указав, что справа и слева отнего обязательно должны быть запятые. Добавлено через 2 минуты и 59 секунд впрочем, нормализация в данном случае должна рулить... |
| Автор: Pokoinik 27.11.2007, 17:03 |
| skyboy, совершенно верно... +1 |