LINUX.ORG.RU

Помогите оптимизировать mysql-запрос


0

0

Сабж. Нужно из таблицы выдирать юзеров с сортировкой по возрасту. Сейчас делаю так: SELECT * FROM `users` ORDER BY `age` ASC Проблема в том, что некоторые юзеры (большинство) возраст не указывают, там везде просто нули прописаны. Так вот, при отображении эти самые нули показываются первыми. А т.к. таких записей большинство, то мы имеем дохрена пустых страниц, причем в самом начале. Нужно как-то сделать так, чтобы юзеры с нулями отображались в конце, а не в начале, но при этом сортировка работала так же по возрастанию. Варианты сортировки в другую сторону, не отображения юзеров "с нюлями" вообще, а также забивания в базу вместо нулей чего-нибудь другого, чтобы оно оказывалось снизу - не предлагать.

anonymous

select r.*
   from
      (select u.*, 1 as chunk
          from users u
          where u.age != 0
       union
       select u.*, 2 as chunk
          from users u
          where u.age = 0) r
   order by chunk, r.age

Может быть, внешний запрос можно и убрать, я не помню, 
предсказуем ли порядок вывода строк при объединении.

eugine_kosenko ★★★
()

Как вариант без union:

select *, if(age > 0, age, 999) as sort from age order by sort;

Tigger ★★★★★
()

select * from users order by age = 0, age

roller ★★★
()

Насколько я знаю "select *" - дурной тон. Что станет с прилодением при изменении базы? Например при добавлении в таблицу столбца?

Ian ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.