2012-02-28 12 views
1

すべてのコースをつかむクエリを実行したい各行(コース)には、のuser_countも必要です。テーブルから情報を取得し、関連テーブルのカウントを取得するMySQLクエリ。すべてのレコードを含まない

私のテーブル構造を本当に素早く表示させてください。私は関連性の2つのテーブルを持っています。これは、関連する情報だけで、これらのテーブルのすべてのフィールドを表示するわけではありません。

この時の私の最初の刺し傷は、次のクエリを作成することでした
COURSE 
id 
title 
desc 

USER_COURSE 
id 
user_id (fk) 
course_id (fk) 

SELECT course.title, course.desc, COUNT(*) as `user_count` 
FROM (`course`) 
JOIN `user_course` ON `user_course`.`course_id` = `course`.`id` 
GROUP BY `user_course`.`user_id` 

このクエリでの問題は、それが唯一のuser_courseテーブル内のレコードを持っているコースを示すことです。ポインタ?

答えて

2

キーポイント0の値としてはレコードをキャプチャしないように(0、COUNT(*))ISNULLのカウントをラップ:あなたは数を数えているよう

  1. count(*)COUNT(user_course.user_id)する必要がありますコースあたりのユーザー数
  2. オン条件はカッコで囲む必要があります
  3. グループを結果としてグループ化するとcourse.idでグループを使用するそのまま。

以下のクエリを参照してください。

SELECT course.title, 
      course.desc, 
      COUNT(`user_course`.`user_id`) AS `user_count` 
    FROM `course` 
      JOIN `user_course` 
      ON (`user_course`.`course_id` = `course`.`id`) 
    GROUP BY `course`.`id` 
+0

shiplu、これは正しいですが、「join」の代わりに「left outer join」をしなければなりません"ありがとう! – Roeland

0

左外部結合を試してください。 'join'の代わりに 'left outer join'と書いてください。

また

+0

ISNULLは LEFT OUTERは 'user_courseを登録しよう(' course')から、user_count' 'として(0、COUNT(*)):( – Roeland

+0

SELECT course.title、course.desc、ISNULLを動作するようには思えません'ON' user_course'.course_id' = 'course'.idid GROUP BY' user_course'.user_id'正しい? – Roeland

関連する問題