Mysql 特色产品随机排序,但正常产品按日期排序
Mysql Sort featured products randomly but normal product by date
假设我的查询是 -
SELECT * FROM products ORDER BY is_featured DESC, created_date DESC
其中 is_featured
是 table 中的标志字段,它包含 1 或 0,
很明显,上面查询returns组记录,首先是所有特色商品(最新的在前),然后是普通商品(最新的在前)。
我的问题:我们如何重写上述查询,使特色产品排在第一位(但将是随机的),然后是普通产品(按创建日期排序)。
我能感觉到可能的答案是编写两个单独的查询,然后加入结果集并遍历循环以显示产品。但是想知道是否可以通过单个查询来实现?
我能想到的一种方法是在 order by
子句中添加另一个计算表达式,即 returns 特色产品的随机值和其他产品的常量,因此它不会影响他们的订单:
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
假设我的查询是 -
SELECT * FROM products ORDER BY is_featured DESC, created_date DESC
其中 is_featured
是 table 中的标志字段,它包含 1 或 0,
很明显,上面查询returns组记录,首先是所有特色商品(最新的在前),然后是普通商品(最新的在前)。
我的问题:我们如何重写上述查询,使特色产品排在第一位(但将是随机的),然后是普通产品(按创建日期排序)。
我能感觉到可能的答案是编写两个单独的查询,然后加入结果集并遍历循环以显示产品。但是想知道是否可以通过单个查询来实现?
我能想到的一种方法是在 order by
子句中添加另一个计算表达式,即 returns 特色产品的随机值和其他产品的常量,因此它不会影响他们的订单:
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