简体   繁体   English

您如何在MySQL中订购UNION?

[英]How do you ORDER a UNION in MySQL?

I would like to know, how can we ordered the list (DESC) in Union based mysql_query, We are getting output when we fetch this query in PHP/ MYSQL. 我想知道,我们如何在基于Union的mysql_query中排序列表(DESC),当我们在PHP / MYSQL中获取此查询时,就得到了输出。 but we just simply put the order by in this query. 但我们只是简单地在此查询中按顺序排序。

 (SELECT info.id 
 FROM info, 1_all 
 WHERE 1_all.id = info.id and 1_all.table_type = 'disp'  AND 1_all.year = '$year' AND  info.category IN (1,2,3) AND info.area IN (2,5,6)  
 GROUP BY resinfo.id ) 
UNION ALL 
 (SELECT info.id 
 FROM info, 2_all 
 WHERE 2_all.id = info.id and 2_all.table_type = 'disp' AND 2_all.year = '$year' AND info.category IN (1,2,3) AND info.area IN (2,5,6) 
 GROUP BY info.id)

To use an ORDER BY or LIMIT clause to sort or limit the entire UNION result, parenthesize the individual SELECT statements and place the ORDER BY or LIMIT after the last one. 要使用ORDER BY或LIMIT子句对整个UNION结果进行排序或限制,请在各个SELECT语句之间加上括号,然后将ORDER BY或LIMIT放在最后一个语句之后。 The following example uses both clauses: 下面的示例使用两个子句:

 (SELECT a FROM t1 WHERE a=10 AND B=1) UNION (SELECT a FROM t2 WHERE a=11 AND B=2) ORDER BY a LIMIT 10; 

http://dev.mysql.com/doc/refman/5.5/en/union.html http://dev.mysql.com/doc/refman/5.5/en/union.html

You can make an subquery like this: 您可以像这样进行子查询:

SELECT info.id
FROM
(
  (SELECT info.id 
   FROM info, 1_all 
   WHERE 1_all.id = info.id and 1_all.table_type = 'disp'  AND 1_all.year = '$year' AND     info.category IN (1,2,3) AND info.area IN (2,5,6)  
   GROUP BY resinfo.id ) 
  UNION ALL 
  (SELECT info.id 
   FROM info, 2_all 
   WHERE 2_all.id = info.id and 2_all.table_type = 'disp' AND 2_all.year = '$year' AND info.category IN (1,2,3) AND info.area IN (2,5,6) 
   GROUP BY info.id)
) as all
order by id desc;

I don't know if MySQL engine accepts it, but other engins such as SQL Server allow you to add an order by clause at the end : 我不知道MySQL引擎是否接受它,但是其他引擎(例如SQL Server)允许您在末尾添加order by子句:

SELECT info.id 
 FROM info, 1_all 
 WHERE 1_all.id = info.id and 1_all.table_type = 'disp'  AND 1_all.year = '$year' AND      info.category IN (1,2,3) AND info.area IN (2,5,6)  
 GROUP BY resinfo.id
UNION ALL 
 SELECT info.id 
 FROM info, 2_all 
 WHERE 2_all.id = info.id and 2_all.table_type = 'disp' AND 2_all.year = '$year' AND     info.category IN (1,2,3) AND info.area IN (2,5,6) 
 GROUP BY info.id
ORDER BY info.id DESC;

If your database engine doesn't accept it, maybe your best bet is to create a view based on your union query and then have a query on this view with your order by. 如果您的数据库引擎不接受它,那么最好的选择是根据您的联合查询创建一个视图,然后对该命令进行查询,查询依据为。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM