2011-02-01 4 views
0

私は、X個のコースにすべての生徒を表示する必要があるコース作成アプリケーションを開発しています。たとえば、生物学のクラスが選択されている場合、ユーザーは他のコースの数に基づいてユーザーをフィルタできます。私のテーブルには、id、uid、courseidの各フィールドがあります。私のような何かをしたいが、構文はどうあるべきか分からない:SQLの値の出現数

Xは、ユーザがフィルタ処理しているコース数(値0-3)であり、Zは、単にIDです
SELECT * FROM course_list WHERE count(uid) > X AND courseid=Z 

ユーザーが現在見ているコースの

答えて

2

クエリのwhere句で集計関数を使用することはできません。

select StudentId 
from course_list 
where CourseId = @CourseId 
group by StudentId 
having count(uid) > @MaxCount 

...またはその効果に何か:あなたのようなものが必要になりますので、その代わりに、彼らは、クエリのhaving部分に属しています。

+0

私の唯一の疑問は@が何のために使われているのかということです。どのくらいのphp私はSQLの知識を使用して非常に基本的です:( – dan

+0

@ダン - それらのクエリのパラメータです。私はXとZの代わりにプレースホルダとして使用されます。 –

0

また、あなたは以下のようなものを自分のデータベースを構築することができます:

Table: Students (includes an autoincrementing ID field StudentId) 
Table: Cources (includes an autoincrementing ID field CourseId) 
Table: StudentCourseAssociation (Includes studentId, courseId, and quarter/semester/year/whatever information) 

を次に、あなただけ:

SELECT StudentId, Count(*) FROM StudentCourseAssociation 
WHERE StudentId IN 
(
    SELECT StudentId FROM StudentCourseAssociation WHERE CourseId = @CourseId 
) 
AND NOT CourseId = @CourseId 
GROUP BY StudentId 

コース内のすべての学生を取得し、あなたに自分のIDやその他のカウントを与える必要があること彼らが持っているクラス。私はメモリからこれをタイプしているので、私の構文が間違っているかもしれません。

+0

また、カウントに基づいてフィルタリングする必要がある場合は、ジャスティンの答えと同様に 'HAVING'節を追加することができます。これは' GROUP BY'節の後に置かれます。 – Jeff

関連する問題