假设我的查询是 -
SELECT * FROM products ORDER BY is_featured DESC, created_date DESC
其中is_featured
是表中包含1或0的标志字段,
很明显,上面的查询首先返回所有特色产品的记录集(其中最新的产品将首先出现),然后是普通产品(最新产品将首先出现)。
我的问题:我们如何重写上述查询,使特色产品首先出现(但随机出现),然后遵循正常产品(按创建日期排序)。
我可以感觉到可能的答案是编写两个单独的查询,并加入结果集并遍历循环以显示产品。但想知道它可以通过单一查询来实现吗?
答案 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