1

我的 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 顺序回复评论,最新的在前。

先感谢您。

4

4 回答 4

6

将 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
于 2013-10-13T21:01:06.350 回答
1

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

   select id,date,text from timeline 
    UNION all
  (select * from reps order by date desc)
于 2013-10-13T21:02:16.850 回答
0

根据日期值创建一个 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
于 2016-05-04T11:29:34.080 回答
-1
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
于 2013-10-13T21:01:43.190 回答