Qui*_*che 11 mysql union sql-order-by
美好的一天.所以,每个标志都在标题:)
我希望合并两个请求的结果并将结果排序在一起(因为不是一个接一个).=>我正在考虑应用一个联合并订购它们.它没用.
我在这里看了一下Stack或者这里的developpez(!!法国网站).我尝试了不同的例子和建议,但没有成功.从我的红色看来,这是因为我正在研究Mysql.
无论如何,这是我的尝试,结果:
我原来的2个要求
SELECT * FROM user_relation WHERE from_user_id = 1
List item
SELECT * FROM user_relation WHERE to_user_id = 1
Run Code Online (Sandbox Code Playgroud)
这个列表的结果由teh frist select(由索引键编排)的结果组成,后面是由Index KEy排序的第二个选择的结果.
尝试1:
(SELECT * FROM user_relation WHERE from_user_id = 1 ORDER BY trust_degree)
UNION
(SELECT * FROM user_relation WHERE to_user_id = 1 ORDER BY trust_degree)
Run Code Online (Sandbox Code Playgroud)
请求已运行,但结果与原始请求相同:首先选择的结果(按索引键排序),然后是第二个请求的结果
尝试2:
(SELECT * FROM user_relation WHERE from_user_id = 1 ORDER BY trust_degree)
UNION
(SELECT * FROM user_relation WHERE to_user_id = 1 ORDER BY trust_degree)
ORDER BY trust_degree
Run Code Online (Sandbox Code Playgroud)
=>请求运行,结果为尝试1,但警告我的Mysql逻辑:(已经分析了这种类型的关闭(ORDER BY))
尝试3
(SELECT * FROM user_relation WHERE from_user_id = 1
UNION
SELECT * FROM user_relation WHERE to_user_id = 1)
ORDER BY trust_degree
Run Code Online (Sandbox Code Playgroud)
=>不要运行,但是错误#1064 - UNION附近的语法错误
尝试4:
SELECT *
FROM (
(SELECT * FROM user_relation WHERE from_user_id = 1)
UNION
(SELECT * FROM user_relation WHERE to_user_id = 1)
)
ORDER BY trust_degree
Run Code Online (Sandbox Code Playgroud)
=>不要运行,并列出一个很好的6错误列表.有什么建议吗?
Mic*_*nst 14
SELECT *
FROM (
(SELECT * FROM user_relation WHERE from_user_id = 1)
UNION
(SELECT * FROM user_relation WHERE to_user_id = 1)
) AS i
ORDER BY trust_degree
Run Code Online (Sandbox Code Playgroud)
您必须为您的选择分配一个别名。但是在这种情况下,a UNION并不是必须的,可以用简单的代替OR,就像@Karoly Horvath在他的评论中指出的那样。结果查询如下所示:
SELECT
*
FROM user_relation
WHERE from_user_id = 1 OR to_user_id = 1
ORDER BY trust_degree
Run Code Online (Sandbox Code Playgroud)
它写在以下文档中UNION:
要应用
ORDER BY或LIMIT应用于个人SELECT,请将子句放在括在括号内的括号内SELECT:Run Code Online (Sandbox Code Playgroud)(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10) UNION (SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);...
ORDER BY对单个SELECT语句的使用不暗示行在最终结果中出现的顺序,因为UNION默认情况下会产生一组无序的行。...
要使用
ORDER BYorLIMIT子句对整个UNION结果进行排序或限制,请在各个SELECT语句后加上括号,然后将ORDER BY或LIMIT放在最后一个之后。下面的示例使用两个子句:Run Code Online (Sandbox Code Playgroud)(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;如前所述,不带括号的语句等效于一个带括号的语句。
通过将上述信息应用于您的查询,它变为:
(SELECT * FROM user_relation WHERE from_user_id = 1)
UNION
(SELECT * FROM user_relation WHERE to_user_id = 1)
ORDER BY trust_degree
Run Code Online (Sandbox Code Playgroud)