2012-04-08 3 views
0

私はこのテーブルのためにselectをビルドしようとしていますが、私は奇妙な結果を得ています。 テーブル:mysqlが正しい選択クエリを見つけることができません

tbl_main 
–––––––––––––––––- 
id user_id  name 

tbl_friends 
–––––––––––––––––- 
id user_id  main_id people 

tbl_cats 
–––––––––––––––––- 
id user_id  main_id 

私はuser_idのみを知っています。

  • 私はtbl_mainからIDのリストを必要とする(結果はこのtbl_main.idのDESC順にソートされなければならない)tbl_friendsときにどのように多くのユニークな人です
  • 数:私はこれらの項目と結果(配列)を取得したいと思いますtbl_friends.user_id = USER_IDとtbl_friends.main_id = tbl_main.id
  • tbl_friendsから人々値のカンマ区切りリスト(または配列)を取得するときのtbl_friends.user_id = USER_IDとtbl_friends.main_id = tbl_main.id
  • 数、ユニークな値tbl_cats.main_id = tbl_main.idの場合のtbl_cats.user_id

これは1つのクエリの結果である必要があります。私は多くのCOUNT(DISTINCT)の組み合わせを試していますが、動作していないし、完全に失われています。助けてください。多くのありがとう

私はこれを試しました(下記参照)。結果は大丈夫だと思われますが、それを行う方法は正しいですか(3つは1つのクエリで選択されます)?サーバー負荷はどうですか?大規模なデータでも問題なく動作しますか?

SELECT 
    tm.id, 
    GROUP_CONCAT(DISTINCT tf.people) AS result_people, 
    COUNT(DISTINCT tc.user_id) AS total 
FROM tbl_main tm 
LEFT JOIN tbl_friends tf 
    ON tm.id = tf.main_id 
    AND tm.user_id = tf.user_id 
LEFT JOIN tbl_cats tc 
    ON tm.id = tc.main_id 
WHERE tm.user_id = $user_id 
GROUP BY tm.id DESC 

-

SELECT e.id 
    (SELECT GROUP_CONCAT(DISTINCT ef.people) FROM tbl_friends ef WHERE ef.user_id=$user_id AND ef.main_id=e.id) as result_people, 
    (SELECT COUNT(DISTINCT et.user_id) FROM tbl_cats et WHERE et.main_id=e.id) as total 

FROM tbl_main e 
WHERE e.user_id = $user_id 
ORDER BY e.id DESC 
+2

私はSELECT e.id、ef.people、COUNT(DISTINCT ef.people)AS countpeople、COUNT(DISTINCT ef.people)+ COUNT(DISTINCT e.user_id)の合計をCOUNT(DISTINCT et。 USER_ID)e.id BY がtbl_main eからtotal_times はtbl_friendsをJOIN Ef上(ef.main_id = e.id) tbl_catsらをJOIN(et.main_id = e.id)ON e.user_id = $ USER_ID ORDER AS DESCですが、私が見ているようにそれは良くありません。 – peter

+1

@peterコメントに独自の質問にコンテンツを追加しないでください。代わりに元の質問を編集し、見つけやすい場所に情報を追加して、適切にフォーマットすることができます。 –

答えて

0

私は私はあなたがやろうとしているが、これはあなたの現在のクエリと同じ結果を返すと、2つのスカラーサブクエリの相関よりも効率的であるべきかを理解することを確認していません2つのクエリのEXPLAIN出力を比較し、それらがどのように運賃を得るかを見てください。

関連する問題