Как я могу сортировать по нескольким столбцам, но не по значению? - PullRequest
2 голосов
/ 28 июля 2011

Название вопроса может быть немного расплывчатым, поэтому не стесняйтесь менять его на что-то более понятное, я просто не могу найти правильные слова.

Итак, вот моя проблема:

В моей таблице есть 2 важных столбца

  • date_added (значение даты и времени)
  • special_price (числовой)

special_price либо NULLили числовое значение в зависимости от специальной цены.

Сейчас я опишу, как я хочу упорядочить свой результат:

Сначала я хочу увидеть все элементы без special_price (NULL) упорядочено по дате (сначала самое новое), затем я хочу увидеть элементы, для которых есть упорядоченная по дате специальная_ценка (что угодно, кроме NULL).

Сначала я попробовал это:

SELECT * FROM products ORDER BY special_price, date_added DESC

Это отлично работало для первой части, где все значения special_price были NULL, но когда он начинался с элементов, у которых упорядоченный special_price упорядочен по значению, которое было в столбце special_price.Это, конечно, имеет смысл, потому что в запросе, который я сначала хотел упорядочить по special_price.

Итак, как я могу позволить запросу игнорировать значение special_price и просто посмотреть, является ли оно NULL или нет?Таким образом, я получаю все NULL, упорядоченные по дате, а затем я получаю все NOT NULL, упорядоченные по дате.

Ответы [ 2 ]

6 голосов
/ 28 июля 2011
ORDER BY IF( ISNULL( special_price ), 0, 1 ), date_added DESC
2 голосов
/ 28 июля 2011

Я бы использовал

SELECT *, IF(special_price IS NULL, 0, 1) AS orderer FROM products ORDER BY orderer, date_added DESC

, который отлично работает для того, чего вы хотите достичь

...