|
|
|
| Всем привет!
В таблице есть поле varchar, в нем хранятся данные в таком виде, например:
Как сделать запрос на совпадение одной из цифр а поле?
То есть например, в скрипт передалась переменная с id = 1, нужно вытащить из БД все записи, где 1 встречается в данном поле. | |
|
|
|
|
|
|
|
для: *m*
(03.05.2011 в 20:31)
| | Все цифры односимвольные? Т.е. от 0 до 9? Если да, то можно воспользоваться запросом вида
SELECT * FROM tbl
WHERE fld LIKE '%1%';
| PS В противном случае придется использовать до четырех условий, что может быть довольно медленно. Если тут важна скорость лучше сразу нормализовать таблицу - будет быстро и исключается целый класс ошибок. | |
|
|
|
|
|
|
|
для: cheops
(03.05.2011 в 20:37)
| | в данном случае да, от 0 до 9, но это id городов, их количество со временем будет расти, но очень не рационально использовать под каждый доп id отдельное поле, или какую нормализацию Вы имеете ввиду? Или может как-то по другому можно хранить, для удобства поиска по ним..? | |
|
|
|
|
|
|
|
для: *m*
(03.05.2011 в 20:50)
| | Никаких столбцов не нужно, нужны дополнительные таблицы. Когда вы видите строку, в которой цифры разделены запятой или любым другим разделителем - это признак того, что нужна нормализация. Т.е. вместо одной таблицы нужно сделать две или три. Тогда каждой цифре в последовательности, разделенной разделителем будет соответствовать отдельная строка в специальной таблице, состоящей из двух столбцов - идентификатора той таблице где сейчас стркои и идентификатора города. Цифры лучше хранить в цифровых полях, не загоняйте их в строки - хлебнете с этими строками горя. | |
|
|
|