2012-04-20 9 views
0

2つのテーブル、アイテムの1つ、アイテムにフラグを付けたユーザーの1つがあります。次に例を示します。ネストしたクエリで正しい順序付けを行う方法

items:        flags: 

item_id | item_name | owner_id  item_id | flagged_by 
------------------------------  -------------------- 
1  | foo  | 1    1  | 2 
2  | bar  | 2    2  | 4 
3  | baz  | 2    2  | 7 
            2  | 7 

私は旗の数が発注フラグテーブルにあるすべての項目についての項目テーブルからの情報を、選択します。したがって、上記の例のために、私の所望の出力が

item_id | item_name | owner_id 
------------------------------ 
2  | bar  | 2 
1  | foo  | 1 

だろう、私が今持っているクエリは、私は内側のクエリが正常に動作することを知っている(正しい順序ですべてのIDを返します)が、ときselect * from items where id in (select item_id from flags group by item_id order by count(*) desc);

です全体的なクエリを実行すると、アイテムIDの順にアイテムが取得されます。クエリを修正するにはどうすればよいですか?

+0

これは私が最近聞かれる質問に似ています。 [link] http://stackoverflow.com/questions/10131150/mysql-which-value-has-maximum-count [/ link]を参照してください。 hth – geoB

答えて

1

現在のところ、外部クエリの順序に影響を与えないサブクエリのみを注文しています。あなたではなくサブクエリを使用するよりもテーブルを結合する場合は、全体のクエリに順序を適用することができるはずです。

select i.* 
    from items i 
    join flags f on i.item_id = f.item_id 
group by i.item_id 
order by count(f.item_id) desc 

デモ:http://www.sqlfiddle.com/#!2/f141b/2

+0

それはうまくいった。ありがとう! – Catherine

関連する問題