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