MySQL - как сделать заказ по имени от a до z, но поставить пустое имя внизу? - PullRequest
0 голосов
/ 28 января 2019

У меня в таблице имя, фамилия, мобильный.который представлен в списке прокрутки с «firstname lastname»

SELECT * FROM `sh_contact` order by firstname asc;

, но некоторые строки содержат пустое имя, в результате в списке прокрутки отображается пустое " lastname".

, чтобы избежать путаницы в пользовательском интерфейсе,как поставить все непустые имена сверху и в конце показать пустые имена?

Ответы [ 3 ]

0 голосов
/ 28 января 2019

Попробуйте это:

...
order by firstname is null, firstname

Это работает, потому что в MySQL логические выражения, которые имеют значение true, равны 1, а false - 0, поэтому при сортировке все нулевые имена будут последними.

Если вы хотите обрабатывать пробелы как пустые значения, используйте это:

...
order by coalesce(firstname, '') = '', firstname

Или, если имя не является пустым, еще проще:

...
order by firstname = '', firstname
0 голосов
/ 28 января 2019

Это должно работать:

SELECT * FROM `sh_contact` ORDER BY CASE WHEN firstname = '' THEN 2 ELSE 1 END, firstname

DB Fiddle

0 голосов
/ 28 января 2019

Вы можете использовать несколько клавиш:

order by (case when firstname = '' or firstname is null then 1 else 2 end) desc,
         firstname asc
...