Вообщем пример простой, немогу подобрать "оператор" чтобы правильно сравнивал, и выводил только то что надо! Вот код: 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 такие дела.. подскажите решение!
вот что нарыл по этой теме: _ (подчеркивание) Любой одиночный символ. Инструкция WHERE фамилия_автора LIKE '_етров' выполняет поиск и выдает все имена, состоящие из шести букв и заканчивающиеся сочетанием «етров» (Петров, Ветров и т.п.). escape_character Символ, помещаемый перед символом-шаблоном, чтобы символ-шаблон рассматривался как обычный символ, а не как шаблон. Аргумент escape_character является символьным выражением, не имеющим значения по умолчанию и возвращающим результат в виде одного символа. попробовал не получается((
а что тут не понятного)) 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, каждая переменная чему то равняется!
сделанное через жопу решение требует таких же жопных подходов. не хотим нормализовать БД к примеру? сделать таблички связей пераметров и значений, объединяющую таблицу и т.д.? что б не LIKE искать, кторый уф какой напряжный, апо индексам и простым where? или мы не ищем простых путей?
Если не хочешь по хорошему, то можно как-то так... Код (Text): |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=куц| PHP: ->Quote( '|'.$this->_db->getEscaped( $filter_ps, true ).'%|', false )
вау, и действительно можно использовать регулярки в мускуле. не знал, спасибо за ссылку. должно сработать, хотя чем-то напоминает выдёргивание гланд через одно место [sql]... WHERE LOWER(scu.params) REGEXP '[^_]sep=1'[/sql]
блин чтоб такое сделать |qst11=1| нужно всю базу перебивать данные(( сейчас с REGEXP буду развлекаться))
так эта красотища работает: if($filter_ps != -1) { $where[] = '(' . 'LOWER(scu.params) REGEXP '.$this->_db->Quote('[^_]sep=1') . ')'; } теперь как бы замутить так чтобы при запросе [^_]ot_sep=1 это значит документы отправлены не выводились результаты где есть [^_]sep=1 это значит документы получены!
блинн, говорюже работает эта функция, мне нужно чтоб при запросе о выводе [^_]sep=1 не выводились [^_]sep=1 в которых есть параметр ot_sep=1 я про это говорю!
так он выводит параметр sep=1 и исключает из вывода параметр ot_sep=1! а оратку как сделать? чтоб выводил параметр ot_sep=1 и сключал из вывода sep=1????
ky3mu4u [sql]... WHERE LOWER(scu.params) REGEXP 'ot_sep=1'[/sql] не то ? сформулируй условие нормально, а то не совсем ясно, что же требуется - искать ot_sep или ещё к тому же отсекать все sep=1 ?
ky3mu4u попробуй объединить два условия с использованием AND NOT обязательно попробуй, и если не получится - можешь смело обратиться к гуглу - он уж точно должен помочь в таком несложном вопросе, как "вырезание гланд через ж..."