通过不使用unio而使用order进行MySQL排序

通过不使用unio而使用order进行MySQL排序,mysql,sorting,union,Mysql,Sorting,Union,我在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_acti

我在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;
我想按上次修改时间排序第一次选择的结果,按时间和状态排序第二次选择的结果。但是ORDER语句被跳过了。结果总是按票证id(主键)排序。 这个问题出了什么问题


谢谢

您使用的联合查询将返回不同的值,并且返回行的顺序不能保证

但您不需要联合查询:

select *
from ticket_ticket AS t1
ORDER BY
  ticket_active!=1,
  ticket_date_last_modified DESC,
  ticket_status_id DESC
LIMIT 0,20;

您使用的联合查询将返回不同的值,并且不保证返回行的顺序

但您不需要联合查询:

select *
from ticket_ticket AS t1
ORDER BY
  ticket_active!=1,
  ticket_date_last_modified DESC,
  ticket_status_id DESC
LIMIT 0,20;

好的,我已经通过以下方式修改了查询:

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;

好的,我已经通过以下方式修改了查询:

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;

你试过按外部排序吗?你需要在外部查询上按子句排序。但是我使用union,因为我需要以不同的方式对两个查询的结果排序!如何在外部查询中移动order语句?您是否尝试按外部放置order?您需要在外部查询中放置order by子句。但我使用union,因为我需要以不同的方式对两个查询的结果进行排序!如何在外部查询中移动order语句?