Mysql随机排序特色产品,但按日期排序正常产品

时间:2016-07-20 06:43:46

标签: mysql sql select sql-order-by

假设我的查询是 -

SELECT * FROM products ORDER BY is_featured DESC, created_date DESC

其中is_featured是表中包含1或0的标志字段, 很明显,上面的查询首先返回所有特色产品的记录集(其中最新的产品将首先出现),然后是普通产品(最新产品将首先出现)。

我的问题:我们如何重写上述查询,使特色产品首先出现(但随机出现),然后遵循正常产品(按创建日期排序)。

我可以感觉到可能的答案是编写两个单独的查询,并加入结果集并遍历循环以显示产品。但想知道它可以通过单一查询来实现吗?

1 个答案:

答案 0 :(得分:2)

我能想到的另一种方法是在order by子句中添加另一个计算表达式,该子句返回特色产品的随机值和其他产品的常量,因此它不会影响他们的顺序:< / p>

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