2010-06-27 45 views
5

使用PHP和MySQL,是否有办法针对UNION中的每个SELECT语句使用不同的ORDER BY?对于MySQL中的每个SELECT使用不同的ORDER BY

SELECT * FROM the_table WHERE color = 'blue' ORDER BY price ASC LIMIT 5 
UNION ALL 
SELECT * FROM the_table WHERE color = 'red' ORDER BY RAND() LIMIT 10 

以上声明不起作用。看来你只能对最终结果集进行ORDER BY。有没有办法在第一个SELECT上执行ORDER BY,然后在使用UNION的第二个SELECT上执行另一个ORDER BY?

+2

为什么不使用Josh Davis最近接受的答案中显示的括号(请参阅http://stackoverflow.com/questions/3128159/multiple-where-with-涨停的mysql/3128169#3128169)?他们改变了整个陈述的含义。 – Gumbo 2010-06-27 18:30:30

回答

8
(SELECT * FROM the_table WHERE color = 'blue' ORDER BY price ASC LIMIT 5) 
UNION ALL 
(SELECT * FROM the_table WHERE color = 'red' ORDER BY RAND() LIMIT 10) 
8

请注意,如果您没有指定LIMIT(虽然您可以指定非常大的虚拟限制),但这不起作用。请参阅mysql文档(13.2.7.3。UNION语法):

“对各个SELECT语句使用ORDER BY意味着行不出现在最终结果中的顺序,因为默认情况下UNION会生成无序的一组行。 ..“ ”要使UNION结果中的行由每个SELECT依次检索的行组成,请在每个SELECT中选择一个附加列作为排序列,并在最后一个SELECT之后添加ORDER BY:

“(选择1 AS sort_col,的col1a,col1b,... FROM T1) UNION (SELECT 2,col2a,col2b,... FROM T2)ORDER BY sort_col; 额外保持individu内排序顺序人SELECT结果,次级列添加到ORDER BY子句:

“(选择1 AS sort_col,的col1a,col1b,... FROM T1) UNION (SELECT 2,col2a,col2b,... FROM t2)ORDER BY sort_col,col1a;“

相关问题