【问题标题】:mySQL UNION clause with two ORDER BY clause带有两个 ORDER BY 子句的 mySQL UNION 子句
【发布时间】:2014-07-05 13:58:29
【问题描述】:

问题来了 我需要从我的表中获取创建日期小于 24 小时前的行,然后按喜欢对它们进行排序,然后将它们与同一个表中的其余行联合,但我希望剩余的行按创建日期排序。 换句话说,我需要为每个 SELECT 单独的 ORDER BY 子句。 更清楚地说,它是这样的:

SELECT * 
FROM (SELECT * 
      FROM 'table' 
      WHERE 'date_created' > timestampadd(hour, -24, now()) 
      ORDER BY 'likes' DESC 
      UNION 
      SELECT * 
      FROM 'table' 
      WHERE 
      ORDER BY date_created DESC ) AS Results 
LIMIT 10 OFFSET 0

感谢这个很棒的社区:)

【问题讨论】:

  • 您在第二个子查询中缺少WHERE 条件。
  • 您还在表和列名称周围使用了错误类型的引号。它们应该是反引号——单引号创建文字字符串。

标签: mysql sql-order-by union fetch


【解决方案1】:

试试这个:

SELECT *, (date_created > timestampadd(hour, -24, now()) AS recent
FROM table
ORDER BY recent DESC, IF(recent, likes, 0) DESC, IF(!recent, date_created, 0) DESC
LIMIT 10 OFFSET 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    相关资源
    最近更新 更多