Что то с LIKE.

  • Автор темы Автор темы _RVK_
  • Дата начала Дата начала

_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.

Вопрос. По какой причине может не работать первый вариант.
 
Попробуй все [ЦВЕТОМ=blue]LIKE "%"[/ЦВЕТОМ] и [ЦВЕТОМ=blue]LIKE "%%"[/ЦВЕТОМ] из запроса убрать.
 
наверное, там есть записи с NULL
но не уверен.
вообще этому вопросу место в другом форуме.
 
наверное, там есть записи с NULL
Точно есть! И что. разве шаблон '%' не значит 'любые символы в том числе и их отсутствие'?

Попробуй все LIKE "%" и LIKE "%%" из запроса убрать
В том то и дело что работет без LIKE. Мало того не работет только на тех полях где значение NULL.
 
Да. Заметьте что в третьем запросе все поля учавствуют, но некоторые из них NULL, и тем не менне работает для всех кроме New Jersey.
 
Я не вижу проблем чтобы убрать из запроса [ЦВЕТОМ=blue]LIKE "%"[/ЦВЕТОМ] и [ЦВЕТОМ=blue]LIKE "%%"[/ЦВЕТОМ].

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

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

Если ты используешь LIKE, то это само собой предполагает поиск значения в данных, а если данных нет, т.е. NULL, то это пропускается. Т.е. FIELD LIKE "%" звучит так - отобрать все ЗНАЧЕНИЯ где ... , не значения не отбираются.
 
сделал, работает. Но все же, почему иногда LIKE "%" не включает в себя NULL. Это какая то особенность. В мануале ничего не нашел. Там про LIKE вообще нет (или так хорошо искал).
 
>Для этого придется кое что переделать
добавить
PHP:
if (!empty($_GET['city'])){
 sql.=" AND city LIKE '%".$_GET['city']."%'"
}
очень просто, а попросту напрягать железо негуманно
 
Да я то знаю что переделать. Вопрос в том почему не работает так, и где это сказанно. Я не пойму почему другие, аналогичные запросы работают(Там ведь тоже поля есть NULL), а этот нет. Ткните, плиз, мня носом в мануал, где что то подобное написанно. Если не сложно конечно.
 
> где что то подобное написанно

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

'%' означает любое значение строки, а NULL это не строка, это совсем другое, тебе уже выше дали ссылки что читать
 
Все понял. Дело в том что "нет символов в поле" и NULL оказывается разные вещи :-) В остальных случаях поле было пустым но не NULL.
Странно но получается так.
А ткнуть носом просил в раздел мануала про LIKE. Я почему-то его не нашел.
 
Andrew_P, ссылка о русской документации висит в этом форуме вверху и нет необходимости каждый раз дублировать ссылки. Каждый пользуется тем, чем удобней.
 
Сверху