2016-06-23 9 views
0

ノートの詳細ページに、ノートの総コメント、総数、総嫌いを表示します。次の3つのテーブルからデータを取得しています。mysql selectクエリの複数の結合で複数のフィールドをカウントする

tbl_note_actions
noteaction_note_idのint(11)NOT NULL、
noteaction_user_idのint(11)NOT NULL、 noteaction_type TINYINT(1)NOT NULL COMMENT '1 - >のように、0->嫌い'、
PRIMARY KEY(noteaction_note_idnoteaction_user_id

tbl_notes_comments
notepost_idは、INT(11)NOT NULL AUTO_INCREMENT、
notepost_note_id INT(11)NOT NULL、 notepost_user_id INT(11)NOT NULL、
notepost_messageテキストNULL NOT、
notepost_rating TINYINT(1)NOT NULL、
notepost_parent_id INT( 11)NOT NULL、
notepost_added_on日時NULL NOT、
notepost_active TINYINT(1)NOT NULL DEFAULT '1'、
notepost_deleted TINYINT(1)NOT NULL DEFAULT '0'、
PRIMARY KEY(notepost_id

tbl_notes
note_idのint(11)NOT NULL AUTO_INCREMENT、
のint(11)NOT NULLと、
note_user_idのint(11)NOT NULLと、
note_descriptionテキスト、NOT NULL、 PRIMARY KEY (note_id

合計嫌い、総嫌いおよび総コメント数が間違っています。

は、ここに私のクエリです:検索結果1が好き、1を嫌いと1コメント

SELECT 
    note_id, 
    note_notetype_id, 
    note_user_id, 
    note_name, 
    note_description, 
    COUNT(DISTINCT notepost_note_id) AS totComments, 
    note_id, 
    count(if(noteaction_type = 1, noteaction_note_id, NULL)) AS totlikes, 
    count(if(noteaction_type = 0, noteaction_note_id, NULL)) AS totdislikes 
FROM `tbl_notes` 
LEFT OUTER JOIN `tbl_users` 
    ON user_id= note_user_id 
INNER JOIN `tbl_courses` 
    ON course_id = note_course_id 
INNER JOIN `tbl_universities` 
    ON university_id = note_university_id 
INNER JOIN `tbl_note_types` 
    ON notetype_id = note_notetype_id 
LEFT OUTER JOIN `tbl_note_actions` 
    ON noteaction_note_id = note_id 
LEFT OUTER JOIN `tbl_notes_posts` 
    ON notepost_note_id = note_id 
WHERE `note_id` = '4' 
GROUP BY note_id, notepost_id 

が、実際にそれが好きな1である必要があり、1とコメント4を嫌います。

私はそれを解決するために助けてください

おかげ

+0

参加時に別名を使用してください。 –

+0

テーブルフィールドは既に別名であるため、エイリアス名を使用する必要はありません。私が間違っていたら私を更新してください。 :) –

+0

あなたはテーブル構造を提供できますか? –

答えて

0

親愛なる、私はその後、複数のコメントを持っているつのポストを持っている場合ので、あなたがtotComments AS DISTINCT COUNT(DISTINCT notepost_note_id)を使用して、なぜ一つのことを知りたいですあなたはそれはあなたを助けることがあり、これを試すことが

はDISTINCT外し、

+0

はまだ働いていない:( –

+0

は、あなたは私tbl_notes_postsの場を与えてくださいすることができ、質問に掲載されて実際にtotCommentsとしてこれらの1つのCOUNT(DISTINCT notepost_id)で、totComments AS COUNT(DISTINCT notepost_note_id)を交換してください –

+0

I謝罪のtbl_notes_comments 、 –

0

をチェックし、そのポストのために常に1つの値を返しますDISTINCTを使用

  SELECT 
    note_id, 
    note_notetype_id, 
    note_user_id, 
    note_name, 
    note_description, 
    noteCount.totalComment AS totComments, 
    note_id, 
    count(if(noteaction_type = 1, noteaction_note_id, NULL)) AS totlikes, 
    count(if(noteaction_type = 0, noteaction_note_id, NULL)) AS totdislikes 
FROM `tbl_notes` 

LEFT JOIN (
         SELECT note_id,count(notepost_note_id) as totalComment 
         FROM tbl_notes 
         GROUP BY note_id 
     ) AS noteCount ON noteCount.note_id=tbl_notes.note_id 
+0

IFNULL(カウント(DISTINCT notep ost_note_id)、0)AS "totComments"、 –

関連する問題