За последние 24 часа нас посетили 17592 программиста и 1651 робот. Сейчас ищут 897 программистов ...

Вытащить только нужное из Mysql оператор LIKE

Тема в разделе "PHP и базы данных", создана пользователем ky3mu4u, 25 июл 2011.

  1. ky3mu4u

    ky3mu4u Активный пользователь

    С нами с:
    16 ноя 2007
    Сообщения:
    111
    Симпатии:
    0
    Вообщем пример простой, немогу подобрать "оператор" чтобы правильно сравнивал, и выводил только то что надо!

    Вот код:
    if($filter_ps != -1) {
    $where[] = '('
    . 'LOWER(scu.params) LIKE '.$this->_db->Quote( '%'.$this->_db->getEscaped( $filter_ps, true ).'%', false )
    . ')';
    }

    scu.params -это столбик в mysql с параметром text. в нем забита куча информации по шаблону пример:
    qst11=1
    ot_sep=1
    sep=1
    filter_ps - в эту переменную попадает что мы ищем то есть к примеру sep=1, такой параметр передается в фильтр с сайта если я хочу вывести всех клиентов с этим параметром! короче все работает все выводит, но только оператор LIKE выводит еще похожие совпадения то есть выводит лишних клиентов у которых параметр ot_sep=1, а мне нужны только с параметром sep=1
    такие дела..
    подскажите решение!
     
  2. ky3mu4u

    ky3mu4u Активный пользователь

    С нами с:
    16 ноя 2007
    Сообщения:
    111
    Симпатии:
    0
    вот что нарыл по этой теме:

    _ (подчеркивание)
    Любой одиночный символ.
    Инструкция WHERE фамилия_автора LIKE '_етров' выполняет поиск и выдает все имена, состоящие из шести букв и заканчивающиеся сочетанием «етров» (Петров, Ветров и т.п.).

    escape_character
    Символ, помещаемый перед символом-шаблоном, чтобы символ-шаблон рассматривался как обычный символ, а не как шаблон. Аргумент escape_character является символьным выражением, не имеющим значения по умолчанию и возвращающим результат в виде одного символа.

    попробовал не получается((
     
  3. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    могу только прокомментировать, что неправильный подход порождает неправильные вопросы
     
  4. ky3mu4u

    ky3mu4u Активный пользователь

    С нами с:
    16 ноя 2007
    Сообщения:
    111
    Симпатии:
    0
    а что тут не понятного)) LIKE ципляет при выводе похожие переменные из ячейки params, нужно чтоб цеплял один к одному.
    Вот что в ячейке храниться и как:

    qst11=1
    qst13=1
    qst13tx=
    ot_sep=1
    sep=1
    qst00=0
    qst2name=
    manager=
    qst2city=
    qst4sale=1
    qst5=01000000000
    forg=проверка времени регистрации33
    shorg=пору
    inn=1111111111
    kpp=666666666
    inv=куц
    bank=куцк
    inv2=куцк
    bik=цукц
    phoneoffice1=е56
    phoneoffice2=39-65-18
    phone=84555435454
    city2=кккк
    region2=36000000000
    dopinfoinf=
    qst3year=
    qst4salebrand=00011561
    qst4serveqp=
    head_firstname=куц
    head_lastname=куцкцу
    head_patronymic=куцкц
    contact_firstname=уцкцук
    contact_lastname=кцукцк
    contact_patronymic=куцкуц

    все забито через Enter, каждая переменная чему то равняется!
     
  5. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    сделанное через жопу решение требует таких же жопных подходов.

    не хотим нормализовать БД к примеру? сделать таблички связей пераметров и значений, объединяющую таблицу и т.д.? что б не LIKE искать, кторый уф какой напряжный, апо индексам и простым where?

    или мы не ищем простых путей?
     
  6. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    неееее... все забито через жопу и это факт!
     
  7. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Использовать REGEXP.
     
  8. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Chushkin
    интересно будет посмотреть как в sql запросе можно использовать regex :)
     
  9. alexfer

    alexfer Активный пользователь

    С нами с:
    2 авг 2010
    Сообщения:
    239
    Симпатии:
    0
  10. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    они нашли друг друга. ну почему меня это не удивляет?

    правим следствия, но причина остается.
     
  11. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Не судите строго молодёжь. Пройдёт время, придут знания, придёт опыт...
     
  12. ky3mu4u

    ky3mu4u Активный пользователь

    С нами с:
    16 ноя 2007
    Сообщения:
    111
    Симпатии:
    0
    Я уже не раз на форуме писал что сделано через жопу)) сейчас попробую REGEXP и отпишу)
     
  13. Mamont

    Mamont Активный пользователь

    С нами с:
    5 дек 2010
    Сообщения:
    183
    Симпатии:
    0
    Если не хочешь по хорошему, то можно как-то так...

    Код (Text):
    1. |qst11=1|
    2. |qst13=1|
    3. |qst13tx=|
    4. |ot_sep=1|
    5. |sep=1|
    6. |qst00=0|
    7. |qst2name=|
    8. |manager=|
    9. |qst2city=|
    10. |qst4sale=1|
    11. |qst5=01000000000|
    12. |forg=проверка времени регистрации33|
    13. |shorg=пору|
    14. |inn=1111111111|
    15. |kpp=666666666|
    16. |inv=куц|
    PHP:
    1. ->Quote( '|'.$this->_db->getEscaped( $filter_ps, true ).'%|', false )
     
  14. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    вау, и действительно можно использовать регулярки в мускуле. не знал, спасибо за ссылку.

    должно сработать, хотя чем-то напоминает выдёргивание гланд через одно место

    [sql]... WHERE LOWER(scu.params) REGEXP '[^_]sep=1'[/sql]
     
  15. ky3mu4u

    ky3mu4u Активный пользователь

    С нами с:
    16 ноя 2007
    Сообщения:
    111
    Симпатии:
    0
    блин чтоб такое сделать |qst11=1| нужно всю базу перебивать данные(( сейчас с REGEXP буду развлекаться))
     
  16. ky3mu4u

    ky3mu4u Активный пользователь

    С нами с:
    16 ноя 2007
    Сообщения:
    111
    Симпатии:
    0
    так эта красотища работает:
    if($filter_ps != -1) {
    $where[] = '('
    . 'LOWER(scu.params) REGEXP '.$this->_db->Quote('[^_]sep=1')
    . ')';
    }
    теперь как бы замутить так чтобы при запросе [^_]ot_sep=1 это значит документы отправлены не выводились результаты где есть [^_]sep=1 это значит документы получены!
     
  17. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    ky3mu4u
    советую почитать про регулярки. убьёшь один день, зато потом будешь радоваться
     
  18. ky3mu4u

    ky3mu4u Активный пользователь

    С нами с:
    16 ноя 2007
    Сообщения:
    111
    Симпатии:
    0
    preg_match?
     
  19. ky3mu4u

    ky3mu4u Активный пользователь

    С нами с:
    16 ноя 2007
    Сообщения:
    111
    Симпатии:
    0
    Ну подскажи, не крути рядом))
     
  20. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
  21. ky3mu4u

    ky3mu4u Активный пользователь

    С нами с:
    16 ноя 2007
    Сообщения:
    111
    Симпатии:
    0
    блинн, говорюже работает эта функция, мне нужно чтоб при запросе о выводе [^_]sep=1 не выводились [^_]sep=1 в которых есть параметр ot_sep=1 я про это говорю!
     
  22. ky3mu4u

    ky3mu4u Активный пользователь

    С нами с:
    16 ноя 2007
    Сообщения:
    111
    Симпатии:
    0
    так он выводит параметр sep=1 и исключает из вывода параметр ot_sep=1! а оратку как сделать? чтоб выводил параметр ot_sep=1 и сключал из вывода sep=1????
     
  23. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    ky3mu4u
    [sql]... WHERE LOWER(scu.params) REGEXP 'ot_sep=1'[/sql] не то ?

    сформулируй условие нормально, а то не совсем ясно, что же требуется - искать ot_sep или ещё к тому же отсекать все sep=1 ?
     
  24. ky3mu4u

    ky3mu4u Активный пользователь

    С нами с:
    16 ноя 2007
    Сообщения:
    111
    Симпатии:
    0
    да да да, при условии ot_sep=1 отсекать все sep=1
     
  25. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    ky3mu4u
    попробуй объединить два условия с использованием AND NOT
    обязательно попробуй, и если не получится - можешь смело обратиться к гуглу - он уж точно должен помочь в таком несложном вопросе, как "вырезание гланд через ж..."