Хитрая выборка
Бьюсь вот над какой проблемой, может кто подскажет
Есть строка с параметрами в БД, созданная с помощью split, где разделитель | (вертикальная черта). Надо как-то сделать поиск по параметрам.
Пока записей мало можно было бы выкрутиться выборкой всей таблицы, разбором через explode и выводу уже по условиям, но это "не айс".
Пробовал составить строку запроса через регулярные выражения, но увы.
Строка для примера такая:
вася|пупкин|23|ул.Киселева|... и т.д.
Подскажите, пожалуйста!
Второе. Какая СУБД? Это важно.
Третье. Есть такая вещь -
Код:
select ... from ... where <поле> like '%значение%';
2. MySQL
3. можно пример выборки LIKE с несколькими параметрами?
Цитата: Franky
1. вариант делать 30 записей в таблице и выборку по ним всем не очень нравится
2. MySQL
3. можно пример выборки LIKE с несколькими параметрами?
2. MySQL
3. можно пример выборки LIKE с несколькими параметрами?
На заметку:краткость далеко не всегда сестра таланта. Иногда она свидетельствует совсем об обратном.
По поводу того что "всем не очень нравится" - очень трудно понять ЧТО ВЫ ХОТИТЕ ДОБИТЬСЯ - вряд ли здесь хорошая идея вообще использовать LIKE.
и не собираюсь использовать like. Вообще была попытка выбрать через регулярку, но не сработало (в них я вообще не силен)
Цитата: Franky
и не собираюсь использовать like. Вообще была попытка выбрать через регулярку, но не сработало (в них я вообще не силен)
если уж вы так извратились - то да, можно использовать регулярку.
то, что это у вас не получилось мы поняли. теперь расскажите, что именно не получилось :)
Была попытка такой вот выборки (переменные должны соответствовать определенным записям):
Код:
$st = "^(.*)|(.*)|$lgot|$city|$raion|$metro|$adr|$typ_h|(.*)|$year|(.*)";
$res = sql("SELECT * FROM `dir` where `text` REGEXP $st");
$res = sql("SELECT * FROM `dir` where `text` REGEXP $st");
пробовал экранировать | - результат тот же т.е. его нет
Автор, не занимайтесь ... В общем, не изобретайте велосипед) Проведите нормальную нормализацию данных и станет проще жить вам.
по регулярке советы будут?
В Вашем случае следует провести нормализацию, как об этом уже было выше сказано.
Создайте следующую таблицу:
[highlight=sql]
CREATE TABLE`params`(
`id` int(11) NOT NULL auto_increment,
`related_object` int(11) NOT NULL,
`checked` bool(1),
`option_name` AS char(50) NOT NULL,
`option_value` AS char(255),
`default_value` AS char(255)
);
[/highlight]
выборка опций будет по related_object
пользуйтесь услугами реляционных баз данных, стройте отношения, укрепляйте связи!
спасибо, попробую понять что за нормолизация такая :)
Нормализация - это, например, создание 10 полей вместо одного, чтобы искать по точному соответствию. Или - если заранее известны все возможные значения - использование INT вместо VARCHAR.
И выборку надо из неё сделать соответственно.
Спасибо за попытку. :
Еще варианты будут? ;