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

Тема в разделе "Базы данных", создана пользователем PeRsoNaliTy, 6 апр 2013.

Статус темы:
Закрыта.
Модераторы: latteo
  1. PeRsoNaliTy

    PeRsoNaliTy Постоялец

    Регистр.:
    5 фев 2009
    Сообщения:
    80
    Симпатии:
    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
    А мне нужно их исключить и оставить только одно с полным вхождением.

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

    Что скажете по такому способу реализации?
     
  2. ne4to

    ne4to Постоялец

    Регистр.:
    16 ноя 2012
    Сообщения:
    107
    Симпатии:
    50
    если у вас в переменной нужное слово, зачем тогда Вы используете %?
    сделайте запрос вида AND pole LIKE 'var', это должно помоч
     
  3. PeRsoNaliTy

    PeRsoNaliTy Постоялец

    Регистр.:
    5 фев 2009
    Сообщения:
    80
    Симпатии:
    9
    Потому что перед словом из переменной может идти + или другое слово, я через explode распарсиваю слова из переменной в массив и циклом создаю запрос вида:
    WHERE pole LIKE '%Rec%'
    AND pole LIKE '%Part%'
    AND pole LIKE '%RarI%
    AND pole LIKE '%Loc%

    Не понял смысла:
    AND pole LIKE 'var'
     
  4. ne4to

    ne4to Постоялец

    Регистр.:
    16 ноя 2012
    Сообщения:
    107
    Симпатии:
    50
    я Вас недопонимаю
    у вас в поле pole допустим есть 3 записи Loc, Part, Loc_Rel
    и вы ходите выше упомянутым запросом чтобы выбралось 2 первые записи ?
     
  5. badnn

    badnn Писатель

    Регистр.:
    18 янв 2010
    Сообщения:
    6
    Симпатии:
    1
    А если так? В вашем варианте между переменными может что-то лишнее затесаться.
    WHERE pole LIKE '%Rec' + 'Part' + 'RarI' + 'Loc%'
     
  6. PeRsoNaliTy

    PeRsoNaliTy Постоялец

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

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

    И вообще пошел флуд, прошу прикрыть тему. Проблему давно сам решил.
     
  7. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.405
    Симпатии:
    1.185
    Опиши пожалуйста решение проблемы и тему я закрою.
     
    PeRsoNaliTy нравится это.
  8. PeRsoNaliTy

    PeRsoNaliTy Постоялец

    Регистр.:
    5 фев 2009
    Сообщения:
    80
    Симпатии:
    9
    В первом посте написал, я его несколько раз правил. Ну а если полный запрос выходит так:
    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);
     
    latteo нравится это.
Статус темы:
Закрыта.