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

vladlen

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

Есть

SELECT * FROM user_info ORDER BY BINARY(otdel)

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

vladlen

Новичок
StUV
Чёто не получается

Пишу
SELECT * FROM user_info WHERE telephon=NULL ORDER BY BINARY(otdel)
Вообще ничего не выводит.
 

Crazy

Developer
Hint: NULL никогда ничему не бывает равен. Есть конструкция "IS NULL".
 

vladlen

Новичок
Уважаемые профи. Проблема не решенна.
Резюмируйте пожалуста всё вышесказанное в конкретную строчку запроса.
 

tony2001

TeaM PHPClub
vladlen
подумай немного сам и измени приведенный выше запрос.
 

Falc

Новичок
vladlen
StUV высказал мысль, Крези ее подправил. Что не ясно то?
 

vladlen

Новичок
Если я пишу

Например

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

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

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

Кобинации с WHERE, telephon, IS, NULL, NOT, =, LIKE я пробовал до того как задал вопрос, но самостоятельно разобраться не получается. Да знаний не хватает, поэтому и задаю вопрос в надежде на оперативную помощь, а предложения ребусы поразгадывать не помогают.
 

tony2001

TeaM PHPClub
задачки:
>SELECT * FROM user_info WHERE telephon=\'343\' ORDER BY BINARY(otdel)
>Выводятся строки с 343 в поле telephon.
1) а как вывести все пустые строки догадаешься сам?
2) а как вывести все НЕ пустые строки догадаешься сам после вопроса 1) ?
 

vladlen

Новичок
Конструкция

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

является правильной?
 

tony2001

TeaM PHPClub
для чего?
для выборки всех строк, в которых поле 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
 

vladlen

Новичок
Проблему решил так

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

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

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

tony2001
Всё же интересно, как делается выборка посредством вышеизложенных советов?
 

StUV

Rotaredom
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
 

vladlen

Новичок
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)

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

StUV

Rotaredom
имхо, первый запрос должен выполняться быстрее

в любом случае --- всегда можешь протестить в мускульной консоли
 

ecto

Новичок
SELECT * FROM user_info WHERE inttelephon != "" AND exttelephon != "" ORDER BY BINARY(otdel)
так будет еще быстрее

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

vladlen

Новичок
ecto

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

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

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

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