Запрос на сравнение строки

Статус
В этой теме нельзя размещать новые ответы.

PeRsoNaliTy

Постоялец
Регистрация
5 Фев 2009
Сообщения
82
Реакции
9
Добрый вечер.
Подскажите, как можно реализовать вот такой запрос к бд.
У нас есть переменная со значением, например Rec+Part+RarI+Loc+Pos_2_Sg нужно выбрать из таблицы строки где у значения определенного поля, назовем его pole, будут входить все слова между + из переменной.
Например:
Значение переменной Rec+Part+RarI+Loc
И находит поле Part+Rec+Loc+RarI

Пробовал делать так:
WHERE pole LIKE '%Rec%'
AND pole LIKE '%Part%'
AND pole LIKE '%RarI%
AND pole LIKE '%Loc%

В этом случае еще выдает значения имеющие продолжение, например: Part+Rec+Loc+RarI+Pos_2_Sg+Loc_Rel
А мне нужно их исключить и оставить только одно с полным вхождением.

Все нашел способ, просто нужно сравнивать длину строки переменной с длиной строки поля.

Что скажете по такому способу реализации?
 
если у вас в переменной нужное слово, зачем тогда Вы используете %?
сделайте запрос вида AND pole LIKE 'var', это должно помоч
 
если у вас в переменной нужное слово, зачем тогда Вы используете %?
сделайте запрос вида AND pole LIKE 'var', это должно помоч
Потому что перед словом из переменной может идти + или другое слово, я через explode распарсиваю слова из переменной в массив и циклом создаю запрос вида:
WHERE pole LIKE '%Rec%'
AND pole LIKE '%Part%'
AND pole LIKE '%RarI%
AND pole LIKE '%Loc%

Не понял смысла:
AND pole LIKE 'var'
 
я Вас недопонимаю
у вас в поле pole допустим есть 3 записи Loc, Part, Loc_Rel
и вы ходите выше упомянутым запросом чтобы выбралось 2 первые записи ?
 
А если так? В вашем варианте между переменными может что-то лишнее затесаться.
WHERE pole LIKE '%Rec' + 'Part' + 'RarI' + 'Loc%'
 
я Вас недопонимаю
у вас в поле pole допустим есть 3 записи Loc, Part, Loc_Rel
и вы ходите выше упомянутым запросом чтобы выбралось 2 первые записи ?

Нет.
Например у нас есть в таблице значение 1+2+3
А в переменной поступает 2+1+3, делаем запрос и должно выбрать строку со значением поля 1+2+3. Т.е у нас поступают одни и те же слова в переменной, только в совсем другом порядке, чем они находятся в таблице.

А если так? В вашем варианте между переменными может что-то лишнее затесаться.
WHERE pole LIKE '%Rec' + 'Part' + 'RarI' + 'Loc%'

Вы тоже не поняли задачу. Там одна переменная в которой так скажем слова Rec + Part + RarI + Loc, а в таблице они могут храниться в другом порядке, например Part + RarI + Loc + Rec.

И вообще пошел флуд, прошу прикрыть тему. Проблему давно сам решил.
 
Опиши пожалуйста решение проблемы и тему я закрою.
 
Опиши пожалуйста решение проблемы и тему я закрою.
В первом посте написал, я его несколько раз правил. Ну а если полный запрос выходит так:
WHERE pole LIKE '%Rec%'
AND pole LIKE '%Part%'
AND pole LIKE '%RarI%
AND pole LIKE '%Loc%
AND LENGTH(pole) =$len_req

Где $len_req длина строки со словами. Запрос строится через цикл, а до этого распарсивается в массив с помощью explode("+", $request);
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху