美好的一天。 所以,每个标题都在标题中:)
我希望合并两个请求的结果并将结果一起排序(因为不是一个接一个)。 =>我正在考虑申请一个工会并订购它们。 它没有用。
我环顾四周on Stack或developpez (!!french website)。我尝试了不同的例子和建议,但没有成功。 从我的红色看来,因为我正在使用Mysql。
无论如何,这是我的尝试,结果:
我原来的2个请求
SELECT * FROM user_relation WHERE from_user_id = 1
List item
SELECT * FROM user_relation WHERE to_user_id = 1
这个列表的结果是由frh 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)
请求已运行,但结果与原始请求相同:首先选择的结果(按索引键排序),然后是第二个请求的结果
尝试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
=>请求运行,结果为尝试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
=>不要运行,但是错误#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
=>不跑,和一个很好的6错误列表。 有什么建议吗?
答案 0 :(得分:4)
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
您必须为您的选择指定别名。但在这种情况下,UNION
不是必需的,可以用简单的OR
代替,正如@Karoly Horvath在他的评论中指出的那样。生成的查询如下所示:
SELECT
*
FROM user_relation
WHERE from_user_id = 1 OR to_user_id = 1
ORDER BY trust_degree
答案 1 :(得分:4)
要将
ORDER BY
或LIMIT
应用于个人SELECT
,请将该子句放在括起SELECT
的括号内:(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 BY
或LIMIT
子句对整个UNION
结果进行排序或限制,请为各个SELECT
语句添加括号并放置ORDER BY
或{ {1}}在最后一个之后。以下示例使用两个子句:LIMIT
没有括号的语句相当于刚刚显示的一个括号。
通过将以上信息应用于您的查询,它变为:
(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;
答案 2 :(得分:0)
SELECT a FROM t1 WHERE a=10 AND B=1
UNION
SELECT a FROM t2 WHERE a=11 AND B=2
ORDER BY 1 LIMIT 10;
如果您需要按更多字段进行排序,只需添加字段编号ORDER BY 1, 2, 3 LIMIT 10;
答案 3 :(得分:-2)
扩展我的评论:
SELECT * into #tempTable FROM (
SELECT * FROM user_relation WHERE from_user_id = 1
UNION
SELECT * FROM user_relation WHERE to_user_id = 1
)
as x
SELECT * FROM #tempTable ORDER BY trust_degree
DROP TABLE #temptable