2010-11-21 1 views
0

お互いに関係のない2つのテーブルのうち、top5をしたいと思います。そして、これはすべて一つの声明の中にあるべきです。 私はこれが何時間もそれを試している可能性があるかどうか疑問に思っています。 Googleは...すべての後に私を助けていなかったmysql - 1つのステートメントで2つの(関連しない)テーブルのうちのトップ5を実行しますか? ( "order by"を使用して)

マイコード:

私はこれを実行すると、私は次の取得
SELECT 
    a.id AS "link_id", a.href AS "link_href", a.clicks AS "link_clicks", 
    b.id AS "user_id", b.name AS "user_name", b.posts AS "user_posts" 
FROM links a, users b 
ORDER BY a.clicks DESC, b.posts DESC 
LIMIT 5

link_id  link_href  link_clicks  user_id  user_name  user_posts 
5   example.com 123456   10   Name 1  98765 
5   example.com 123456   99   Name 2  7486 
5   example.com 123456   77   Name 3  6543 
5   example.com 123456   65   Name 4  23 
5   example.com 123456   1   Name 5  0

あなたは結果を見ることができるようにリンクは毎回同じです。

私が想像することのできたすべてを試しました...内部結合、左結合など...何も働かなかった。これは実際に可能な1つのステートメントにありますか、または2つの別個のステートメントを使用すべきですか? (私はこれがパフォーマンスにとってより良いと思ったので、1つのステートメントを試しましたか?)

答えて

1

これは1つのクエリでこれを行うのは意味がありません。 カラム名が一致するようにカラム名の別名を使用する場合は、UNIONを使用して行うことができます(タイプの適合も必要です)。しかし、私が言ったように、は本当にそれをしない

+0

大丈夫です。あなたの助けとアドバイスをありがとう。私は2つのステートメントを使用します。 – Fabian

1

リンクとユーザーが関連していないとすれば、単一のクエリとしてこれを行うことは理にかなっていません。書かれたようにあなたの質問はcross joinをしています。これはあなたが望むものではありません。

2つのクエリを送信してください。関連性のないデータを1つのクエリで取得することは無意味です。

+0

ありがとうございます。私はこの無関係なデータのために2つのステートメントを使用します:) – Fabian

0

あなたは、あなたがuser_idを

SELECT 
    a.id AS "link_id", a.href AS "link_href", a.clicks AS "link_clicks", 
    b.id AS "user_id", b.name AS "user_name", b.posts AS "user_posts" 
FROM links a, users b 

where a.user_id = b.id 

ORDER BY a.clicks DESC, b.posts DESC 
LIMIT 5 

上のテーブルを結合したいと言って何をすることで表AにはユーザーIDを持っていないなら、あなたは2つのテーブル間の共通のリンクを把握する必要があります。

関連する問題