【问题标题】:Order by date a select query on UNION ALL按日期排序 UNION ALL 上的选择查询
【发布时间】:2013-10-13 20:56:02
【问题描述】:

我的 MySql 查询没有什么问题: 我有两张桌子:

表格时间线

id | date      |  text
1    2013-10-13   Hello

代表

id | date      | text
1   2013-10-12   Its me again
1   2013-10-11   What?
1   2013-10-10   Lorem ipsum

我正在做的是UNION ALL 时间线和代表。第一行应始终是时间线中的行(始终是一行),然后是代表表中的所有行,但按DESC 顺序。

我的查询是以下一个(除了 order by 之外其他都可以)

select id,date,text from timeline UNION ALL select * from reps order by date desc

想像评论(位于顶部)这样的评论,按 desc 顺序回复评论,最新的在前。

提前谢谢你。

【问题讨论】:

    标签: mysql sql sql-order-by union-all


    【解决方案1】:

    将 UNION 放在子查询中:

    SELECT id, date, text
    FROM (SELECT id, date, text, 1 AS priority
          FROM timeline
          UNION ALL
          SELECT *, 2 AS priority
          FROM reps) u
    ORDER BY priority, date DESC
    

    【讨论】:

    • 你必须先按id订购
    • @Jonysuise 嗯?为什么会这样?
    • 我在问题中没有看到任何提及。他说时间线只有一排。我怀疑他的实际查询在两个子查询中都有 where id = ...,所以他没有显示所有 ID。
    • 假设reps表的id是timelines表的id的fk...:(
    • 工作就像魅力!也感谢所有其他人!
    【解决方案2】:

    您的查询是正确的,您只需像这样通过 () 关闭第二个查询:它只会订购第二个查询。没有 () 它将对两个查询进行排序。

       select id,date,text from timeline 
        UNION all
      (select * from reps order by date desc)
    

    【讨论】:

    • 不是我的反对意见,但UNION ALL 会保证左侧的结果先于右侧的所有结果吗?
    • @JoachimIsaksson 如果您先选择它,那么它首先出现。
    【解决方案3】:

    根据日期值创建一个 Unix_timestamp 并按其值排序。

     SELECT -1 as 'id' , 99999999999999 as 'sortalias' , now() as 'datum||date'
     UNION
     ( SELECT
          id
          ,unix_timestamp(datum) as 'sortalias'
          ,datum as 'datum||date'
          FROM kunde
     )
     order by sortalias desc
    

    【讨论】:

      【解决方案4】:
      select id,date,text from (
          select id,1 poid,date,text
          from timeline
          union all
          select id,2 poid,date,text
          from reps
      ) t
      order by t.id asc,t.poid asc,t.date desc
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-10
        • 1970-01-01
        • 1970-01-01
        • 2015-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-13
        相关资源
        最近更新 更多