Что то с LIKE.

_RVK_

Новичок
Что то с LIKE.

Вот такой запрос:
PHP:
SELECT DISTINCT name,county,address,city,state,zip,photo FROM offenders WHERE name LIKE "%%" AND county LIKE "%" AND address LIKE "%%" AND city LIKE "%" AND state="New Jersey" AND zip LIKE "%"
Возвращает 0 записей хотя должен все для New Jersey.

Такой запрос:
PHP:
SELECT DISTINCT name,county,address,city,state,zip,photo FROM offenders WHERE name LIKE "%%" AND county LIKE "%" AND state="New Jersey"
Возвращает все записи для New Jersey.

Такой запрос:
PHP:
SELECT DISTINCT name,county,address,city,state,zip,photo FROM offenders WHERE name LIKE "%%" AND county LIKE "%" AND address LIKE "%%" AND city LIKE "%" AND state="New Mexico" AND zip LIKE "%"
Возвращает все записи для New Mexico.

Вопрос. По какой причине может не работать первый вариант.
 

Andrew_P

Guest
Попробуй все [ЦВЕТОМ=blue]LIKE "%"[/ЦВЕТОМ] и [ЦВЕТОМ=blue]LIKE "%%"[/ЦВЕТОМ] из запроса убрать.
 

RomikChef

Guest
наверное, там есть записи с NULL
но не уверен.
вообще этому вопросу место в другом форуме.
 

_RVK_

Новичок
наверное, там есть записи с NULL
Точно есть! И что. разве шаблон '%' не значит 'любые символы в том числе и их отсутствие'?

Попробуй все LIKE "%" и LIKE "%%" из запроса убрать
В том то и дело что работет без LIKE. Мало того не работет только на тех полях где значение NULL.
 

_RVK_

Новичок
Да. Заметьте что в третьем запросе все поля учавствуют, но некоторые из них NULL, и тем не менне работает для всех кроме New Jersey.
 

Andrew_P

Guest
Я не вижу проблем чтобы убрать из запроса [ЦВЕТОМ=blue]LIKE "%"[/ЦВЕТОМ] и [ЦВЕТОМ=blue]LIKE "%%"[/ЦВЕТОМ].

Если не хочешь убрать, тогда добавь к каждому [ЦВЕТОМ=blue]LIKE "%"[/ЦВЕТОМ] и [ЦВЕТОМ=blue]LIKE "%%"[/ЦВЕТОМ] - [ЦВЕТОМ=blue] or is null[/ЦВЕТОМ] и возьми все это в скобки [ЦВЕТОМ=blue]()[/ЦВЕТОМ]. ;) Но это мазахизм.
 

_RVK_

Новичок
Автор оригинала: Andrew_P
Я не вижу проблем чтобы убрать из запроса [ЦВЕТОМ=blue]LIKE "%"[/ЦВЕТОМ] и [ЦВЕТОМ=blue]LIKE "%%"[/ЦВЕТОМ].

Если не хочешь убрать, тогда добавь к каждому [ЦВЕТОМ=blue]LIKE "%"[/ЦВЕТОМ] и [ЦВЕТОМ=blue]LIKE "%%"[/ЦВЕТОМ] - [ЦВЕТОМ=blue] or is null[/ЦВЕТОМ] и возьми все это в скобки [ЦВЕТОМ=blue]()[/ЦВЕТОМ]. ;) Но это мазахизм.
Думал об этом. Для этого придется кое что переделать. А не хочется. Мне просто интересно. Для других записей все работает. Почему не работает для этих конкретных записей.
 

Andrew_P

Guest
Diesel, потому, что так работает SQL.

Если ты используешь LIKE, то это само собой предполагает поиск значения в данных, а если данных нет, т.е. NULL, то это пропускается. Т.е. FIELD LIKE "%" звучит так - отобрать все ЗНАЧЕНИЯ где ... , не значения не отбираются.
 

_RVK_

Новичок
сделал, работает. Но все же, почему иногда LIKE "%" не включает в себя NULL. Это какая то особенность. В мануале ничего не нашел. Там про LIKE вообще нет (или так хорошо искал).
 

Yurik

/dev/null
>Для этого придется кое что переделать
добавить
PHP:
if (!empty($_GET['city'])){
 sql.=" AND city LIKE '%".$_GET['city']."%'"
}
очень просто, а попросту напрягать железо негуманно
 

_RVK_

Новичок
Да я то знаю что переделать. Вопрос в том почему не работает так, и где это сказанно. Я не пойму почему другие, аналогичные запросы работают(Там ведь тоже поля есть NULL), а этот нет. Ткните, плиз, мня носом в мануал, где что то подобное написанно. Если не сложно конечно.
 

Апельсин

Оранжевое создание
> где что то подобное написанно

что написано?

'%' означает любое значение строки, а NULL это не строка, это совсем другое, тебе уже выше дали ссылки что читать
 

_RVK_

Новичок
Все понял. Дело в том что "нет символов в поле" и NULL оказывается разные вещи :) В остальных случаях поле было пустым но не NULL.
Странно но получается так.
А ткнуть носом просил в раздел мануала про LIKE. Я почему-то его не нашел.
 

Апельсин

Оранжевое создание
Andrew_P, ссылка о русской документации висит в этом форуме вверху и нет необходимости каждый раз дублировать ссылки. Каждый пользуется тем, чем удобней.
 
Сверху