質問 |
||
| 質問者:takagoo100 | 別テーブルの行数を利用してソートしたい | |
|---|---|---|
困り度:
|
MySQLバージョン4.1.16を使用しています。 テーブル「tbl1」をテーブル「tbl2」の「msg」カラムの行数を利用して ソートしたいのですが、どのようなSQL文になるのでしょうか? 以下の例だと、tbl2のuser_idがbbbbのmsg数の方が多いので descで並べるとtbl1はbbbb、aaaaの順になるようにしたいです。 テーブル「tbl1」 +----------+ | user_id | +----------+ | aaaa | +----------+ | bbbb | +----------+ テーブル「tbl2」 +----------+---------+ | user_id | msg | +----------+---------+ | bbbb | ああ | +----------+---------+ | aaaa | いい | +----------+---------+ | bbbb | うう | +----------+---------+ SELECT * FROM tbl1 INNER JOIN tbl2 ON tbl1.user_id = tbl2.user_id ORDER BY (ここの部分が知りたいです、または全く違う文になるのでしょうか?) desc |
|
質問投稿日時:08/03/22 04:55 質問番号:3884050 |
||
回答 |
|
| 回答者:nora1962 | > SELECT * FROM users LEFT JOIN (SELECT tbl2.user_id,count(*) cnt > FROM tbl2 GROUP BY tbl2.user_id) t2 ON users.user_id = tbl2.user_id > ORDER BY t2.cnt desc; インラインビューに「t2」という別名をつけているのに、結合条件のON句 で「tbl2」を使っているからです。「tbl2」を「t2」に変えてください。 |
|---|---|
| 種類:回答 どんな人:一般人 自信:自信あり |
|
| |
回答日時:08/03/22 20:55 回答番号:No.3 |
|
| この回答へのお礼 | ご返答ありがとうございます。 なるほど、うっかりミスでした・・・すいません 試してみましたが希望する結果になりました。ありがとうございます。 |
回答良回答20pt |
|
| 回答者:nora1962 | よく考えたらleft join のほうがいいですね。 SELECT tbl1.* FROM tbl1 LEFT JOIN ( SELECT tbl2.user_id,count(*) cnt FROM tbl2 GROUP BY tbl2.user_id) t2 ON tbl1.user_id = t2.user_id ORDER BY t2.cnt desc; |
|---|---|
| 種類:回答 どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/22 08:55 回答番号:No.2 |
|
| この回答へのお礼 | ご返答ありがとうございます。 その方法を試してみたのですが、 Error Number: 1054 Unknown column 'tbl2.user_id' in 'on clause' SELECT * FROM users LEFT JOIN (SELECT tbl2.user_id,count(*) cnt FROM tbl2 GROUP BY tbl2.user_id) t2 ON users.user_id = tbl2.user_id ORDER BY t2.cnt desc; というエラーが出てしまいます・・・(usersテーブルはtbl1と同じ構造です) ちゃんとtbl2テーブルには「user_id」と「msg」のカラムがあり 値も例のように入れてるのですが、どこが間違っているのでしょうか? |
回答 |
|
| 回答者:nora1962 | お疲れ様です。 こんな感じでどうでしょう。 SELECT tbl1.* FROM tbl1 INNER JOIN ( SELECT tbl2.user_id,count(*) cnt FROM tbl2 GROUP BY tbl2.user_id) t2 ON tbl1.user_id = t2.user_id ORDER BY t2.cnt desc; |
|---|---|
| 種類:回答 どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/22 06:14 回答番号:No.1 |
|
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |