Отсеить строки без записи.

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

vladlen

Новичок
Отсеить строки без записи.

Есть

SELECT * FROM user_info ORDER BY BINARY(otdel)

Подскажите, как сделать запрос чтобы строчка не выводилась, если в поле "telephon" нет записи?
 
StUV
Чёто не получается

Пишу
SELECT * FROM user_info WHERE telephon=NULL ORDER BY BINARY(otdel)
Вообще ничего не выводит.
 
Hint: NULL никогда ничему не бывает равен. Есть конструкция "IS NULL".
 
Уважаемые профи. Проблема не решенна.
Резюмируйте пожалуста всё вышесказанное в конкретную строчку запроса.
 
vladlen
подумай немного сам и измени приведенный выше запрос.
 
vladlen
StUV высказал мысль, Крези ее подправил. Что не ясно то?
 
Если я пишу

Например

SELECT * FROM user_info WHERE telephon=\'343\' ORDER BY BINARY(otdel)

Выводятся строки с 343 в поле telephon.

Какой запрос выведет все строки, кроме пустых.

Кобинации с WHERE, telephon, IS, NULL, NOT, =, LIKE я пробовал до того как задал вопрос, но самостоятельно разобраться не получается. Да знаний не хватает, поэтому и задаю вопрос в надежде на оперативную помощь, а предложения ребусы поразгадывать не помогают.
 
задачки:
>SELECT * FROM user_info WHERE telephon=\'343\' ORDER BY BINARY(otdel)
>Выводятся строки с 343 в поле telephon.
1) а как вывести все пустые строки догадаешься сам?
2) а как вывести все НЕ пустые строки догадаешься сам после вопроса 1) ?
 
Конструкция

SELECT * FROM user_info WHERE telephon IS NULL ORDER BY BINARY(otdel)

является правильной?
 
для чего?
для выборки всех строк, в которых поле telephon равно NULL ? да
для выборки всех строк, в которых поле telephon НЕ равно NULL ? нет
для выборки всех строк, поле telephon пусто ? нет

попробуй прочесть вслух: SELECT * FROM user_info WHERE telephon IS NULL ORDER BY BINARY(otdel).
"выбрать все поля строк из таблицы user_info, где поле telephon - это NULL".

почитай здесь: http://www.mysql.com/doc/ru/Retrieving_data.html
 
Проблему решил так

SELECT * FROM user_info WHERE telephon LIKE \'___\' ORDER BY BINARY(otdel)

Всем спасибо.

Как понимаю, это лишь один из возможных способов?

tony2001
Всё же интересно, как делается выборка посредством вышеизложенных советов?
 
vladlen
твоя конструкция выбирает записи с 3-значными телефонами

если у тебя в базе действительно есть записи с NULL-значениями поля telephon, то корректный запрос, выводящий все остальные записи:

SELECT * FROM user_info WHERE telephon IS NOT NULL ORDER BY BINARY(otdel)

вероятно, при записи в базу ты пишешь что-то в поле telephon (пустая строка, etc ...), что уже не есть NULL

см. http://www.mysql.com/doc/en/Problems_with_NULL.html
 
StUV
Да, в поле "telephon" пустая строка.
В итоге у меня такие запросы получились.

SELECT * FROM user_info WHERE NOT (inttelephon = "" AND exttelephon = "") ORDER BY BINARY(otdel)

SELECT * FROM user_info WHERE inttelephon LIKE "___" OR exttelephon LIKE "________" ORDER BY BINARY(otdel)

Хотел бы услышать мнение знающих людей по поводу, какой запрос лучше (по скорости или может по другим каким либо критериям)?
 
имхо, первый запрос должен выполняться быстрее

в любом случае --- всегда можешь протестить в мускульной консоли
 
SELECT * FROM user_info WHERE inttelephon != "" AND exttelephon != "" ORDER BY BINARY(otdel)
так будет еще быстрее

а по полю otdel обязательно постройте индекс
это очень сильно повлияет на скорость запроса
особенно на большой таблице
 
ecto

Тоже вариант.
Только чуть подправлю

SELECT * FROM user_info WHERE inttelephon != "" OR exttelephon != "" ORDER BY BINARY(otdel)

StUV
В консоли запускал, но записей мало и время выполнения всех вариантов примерно одинаковое.

Благодарю за помощь
 
Сверху