【问题标题】:Mysql Sort featured products randomly but normal product by dateMysql 随机排序特色产品,但按日期正常产品
【发布时间】:2016-07-20 06:43:46
【问题描述】:

假设我的查询是 -

SELECT * FROM products ORDER BY is_featured DESC, created_date DESC

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

我的问题:我们如何重写上面的查询,这样,特色产品首先出现(但将是随机的),然后是普通产品(按创建日期排序)。

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

【问题讨论】:

    标签: mysql sql select sql-order-by


    【解决方案1】:

    我可以考虑的一种方法是在 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
    

    【讨论】:

    • @WatsMyName 愚蠢的错字:-( 应该是“THEN”。已编辑并修复。
    • 是的,我的错误也是如此,我将其读为“THEN”。谢谢哥们,成功了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多