php - mysql - порядок по полю больше 0

0

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

1
0
5
2
0
3
3
5
0
5

Я хочу отсортировать поля, мне нужно сначала вернуть поля с нулевым значением, а когда с нулевым значением, отсортированные строки должны выглядеть так:

1
5
2
3
3
5
5
0
0
0

Я не хочу сортировать по номеру, я хочу, наконец, показать 0 значений,

У меня этот код, но он сортирует их по номеру:

 ORDER BY cASE WHEN num_mojud = 0 THEN num_mojud END ASC,CASE WHEN num_mojud > 0 THEN num_mojud END ASC
or
ORDER BY IF (num_mojud = 0, 9999999, num_mojud )

как я могу это сделать?

  • 0
    Этот шаблон кажется случайным, кроме ручной сортировки, я не уверен, что это возможно как есть, хотя я могу ошибаться.
  • 0
    Вам нужен столбец, который определяет порядок строк, которые не имеют нулей.
Показать ещё 1 комментарий
Теги:
mysqli

3 ответа

3

В MySQL вы можете использовать два ключа для сортировки. Обратите внимание, что таблицы SQL представляют собой неупорядоченные множества. Итак, наивно, вы можете сначала поставить нули, просто отсортировав по значению (при условии, что значения неотрицательны):

order by num_mojud

Это не похоже на то, что вы хотите. Вы можете положить нули первым, а остальные в произвольном порядке:

order by (num_mojud = 0) desc

MySQL рассматривает booleans как числа, с "1" для true и "0" для false. Следовательно, desc по порядку по ключу.

Вы можете поместить нули первым остальным в произвольном порядке, выполнив:

order by (num_mojud = 0) desc, rand()

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

order by (num_mojud = 0) desc, id
0
select num_mojud
from MyTable
order by case when num_mojud is 0 then 1 else 0 end, num_mojud
0

вы можете выбрать num_mojud из пользовательской таблицы.

Первый: SELECT num_mojud FROM tableName WHERE num_mojud > 0 получить все число больше 0 Второе: SELECT num_mojud FROM tableName WHERE num_mojud = 0 все числа равны 0

SELECT num_mojud 
FROM (
    (SELECT num_mojud FROM tableName WHERE num_mojud > 0) 
    UNION
    (SELECT num_mojud FROM tableName WHERE num_mojud = 0)
) as myCustomTable

Ещё вопросы

Сообщество Overcoder
Наверх
Меню