LIKE наоборот

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

Dark Wizard

Гуру форума
Регистрация
23 Сен 2007
Сообщения
194
Реакции
80
Добрый день,

подскажите, пожалуйста, по работе SQL запроса. Никак не получается составить, хотя переписываю один в один из примеров.

Требуется: выбрать все записи из таблицы portal_role_groups где введённый мною id включает в себя значение idrange из таблицы. Например, я даю id = 1234567, мне нужно найти записи с idrange = 123

Пробовал по-разному модифицировать запросы:
Код:
SELECT * FROM portal_role_groups WHERE position(idrange IN '214748364789') > 0;  

SELECT * FROM portal_role_groups WHERE "214748364789" LIKE CONCAT( idrange, "%");
Но не работает - или выводит все записи с пустым idrange, или с не пустым.
 
Включает полностью? Или частично?
 
как это частично?)
Введённый мною id 1234567 с клавиатуры полностью включает и начинается с 123 (кол-во цифр и сами цифры могут быть другие) из записей в базе.
 
Но не работает - или выводит все записи с пустым idrange, или с не пустым.

Создал табличку и проверил, оба ваши запроса сработают, если в таблице есть поле с idrange 214 или 2147 или 21474 и т.п.
Уверены что в вашей таблице есть такие записи?
 
Последнее редактирование:
Подтверждаю запросы работают правильно, дело в другом.
Как вариант использовать RLIKE:
SELECT "123456789" RLIKE '123456'; -- 1
SELECT "123456789" RLIKE '000000'; -- 0
Правда
SELECT "123456789" RLIKE '456'; -- 1
 
Всем спасибо, оказалось что дело в типе столбца (был varchar), и он показывал при поиске также все пустые значения. В итоге сделал так:

Код:
SELECT * FROM portal_role_groups WHERE (position(idrange IN '".$userid."') > 0) AND idrange <> '' ORDER BY CHAR_LENGTH(idrange) DESC LIMIT 1;
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху