0

我在 mysql 中使用 union 语句,但我在排序结果时遇到了一些问题。ORDER 语句根本不起作用,结果总是按 id 字段排序。

这是一个示例查询:

SELECT a.* FROM ( ( select * from ticket_ticket AS t1 WHERE ticket_active=1 ORDER BY t1.ticket_date_last_modified DESC ) 
UNION ( select * from ticket_ticket AS t2 WHERE ticket_active=0 ORDER BY t2.ticket_date_last_modified DESC, t2.ticket_status_id DESC ) )
AS a LIMIT 0,20;

我想按 last_modified 时间排序第一个 SELECT 的结果,按时间和状态排序第二个 SELECT 的结果。但是 ORDER 语句被跳过了。结果总是按ticket_id(PRIMARY KEY)排序。这个查询有什么问题?

谢谢!

4

2 回答 2

2

好的,我已经修复了它以这种方式编写查询:

SELECT a.*
FROM
 (SELECT *
  FROM ticket_ticket
 WHERE ticket_active=1
 ORDER BY ticket_date_last_modified DESC) AS a
UNION ALL
SELECT b.*
FROM
(SELECT *
 FROM ticket_ticket
 WHERE ticket_active=0
 ORDER BY ticket_date_last_modified DESC, ticket_status_id DESC) AS b LIMIT 0,
                                                                          20;
于 2013-07-25T10:29:52.677 回答
1

您正在使用将返回不同值的 UNION 查询,并且不能保证返回行的顺序。

但是您不需要对此进行联合查询:

select *
from ticket_ticket AS t1
ORDER BY
  ticket_active!=1,
  ticket_date_last_modified DESC,
  ticket_status_id DESC
LIMIT 0,20;
于 2013-07-25T10:27:03.197 回答