Как отсортировать с 0 на конце в результате - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть список товаров с ценами.Некоторые продукты доступны только по запросу.Эта продукция помечена в базе данных с ценой 0.
Если я сейчас сделаю запрос вроде:

$sql = "SELECT * FROM products WHERE ORDER BY Price ASC";

Результаты, конечно, начинаются с цены 0.
Но яхотите получить все цены 0 в конце результатов.
Возможно ли это с помощью SQL-запроса или как лучше всего пересортировать в php?
Thx в расширенном
Bernd

Ответы [ 3 ]

0 голосов
/ 17 февраля 2019

Да, вы можете использовать побитовое отрицание, чтобы сделать 0 максимальным значением bigint в сортировке.

SELECT *
FROM products
ORDER BY
    CASE WHEN Price = 0 THEN ~0 ELSE Price END ASC
0 голосов
/ 17 февраля 2019

Вы можете использовать функцию mysql FIELD для получения данных в нужном вам порядке.

   SELECT * FROM products WHERE ORDER BY FIELD(Price,0) ASC
0 голосов
/ 17 февраля 2019

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

SELECT *
FROM products
WHERE ...
ORDER BY
    CASE WHEN Price > 0 THEN 0 ELSE 1 END,
    Price;

В MySQL предложение ORDER BY может быть упрощено:

SELECT *
FROM products
WHERE ...
ORDER BY
    Price = 0,    -- false (0) for positive prices, true (1) for zero prices
    Price;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...