2016-07-20 1 views
1

Предположим, что мой запрос -Mysql Сортировать прославленных продукты в случайном порядке, но нормальный продукт по дате

SELECT * FROM products ORDER BY is_featured DESC, created_date DESC 

Где is_featured находится поле флага в таблице, которая держит 1 или 0, свои очевидные указанные выше запрос возвращает набор записей со всеми признаками продуктов сначала (последний из которых будет первым), а затем нормальные продукты (последний из которых будет первым).

Мой вопрос: как мы можем переписать вышеприведенный запрос таким образом, чтобы на первом месте появились Рекомендуемые продукты (но будет случайным), а затем следует нормальным продуктам (отсортированным по дате создания).

Я могу почувствовать возможный ответ, чтобы написать два отдельных запроса и присоединиться к набору результатов и перебрать цикл, чтобы отображать продукты. Но интересно, может ли это быть достигнуто с помощью одного запроса?

ответ

2

Один из способов я мог думать о том, чтобы добавить еще одно выражения, рассчитанные в пункт order by, который возвращает случайное значение признаков продукции и постоянная для других продуктов, так что это не влияет на их порядок:

SELECT * 
FROM  products 
ORDER BY is_featured DESC, 
     CASE is_featured 
       WHEN 1 THEN RAND() 
       ELSE 1 -- Or some other constant 
     END, 
     created_date DESC 
+0

Я получил ошибку mysql рядом с '' THAN RAND() ' – WatsMyName

+0

@WatsMyName stupid typo :-(Должно быть« THEN ». Отредактировано и исправлено. – Mureinik

+0

Да, моя ошибка также, я прочитал ее как« THEN ». – WatsMyName