良い一日。だから、everythignはタイトルにあります:)
私は2つの要求の結果をマージし、結果を一緒に並べようとしています(次々とではありません)。 =>ユニオンを適用して注文することを考えていました。うまくいきませんでした。
私はここ on Stack またはここ developpez(!!フランスのウェブサイト) のように見回しました。私は別の例と提案を試みますが、成功しません。 Mysqlで作業しているため、私が赤であるように思われます。
とにかく、ここに私の試みと結果があります:
私の元の2つのリクエスト
SELECT * FROM user_relation WHERE from_user_id = 1
List item
SELECT * FROM user_relation WHERE to_user_id = 1
このリストの結果は、最初の選択(インデックスキーで順序付け)の結果と、それに続くインデックスKEyで順序付けされた2番目の選択の結果で構成されています。
試み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番目のリクエストの結果
試み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エラーのニースリスト。なにか提案を?
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
は不要であり、@ Karoly Horvathがコメントで指摘しているように、単純なOR
で置き換えることができます。結果のクエリは次のようになります。
SELECT
*
FROM user_relation
WHERE from_user_id = 1 OR to_user_id = 1
ORDER BY trust_degree
UNION
のドキュメント で記述されています。
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);
...
個々の
SELECT
ステートメントでORDER BY
を使用しても、UNION
はデフォルトで順序付けられていない行のセットを生成するため、最終結果に行が表示される順序については何も意味しません。...
ORDER BY
またはLIMIT
句を使用してUNION
結果全体をソートまたは制限するには、個々のSELECT
ステートメントを括弧で囲み、最後のステートメントの後にORDER BY
または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;
括弧なしのステートメントは、上記のように括弧で囲まれたものと同等です。
上記の情報をクエリに適用すると、次のようになります。
(SELECT * FROM user_relation WHERE from_user_id = 1)
UNION
(SELECT * FROM user_relation WHERE to_user_id = 1)
ORDER BY trust_degree