2017-09-06 5 views
-1

出席者の情報(出席者ID、出席のためのコース/件名、出席者の有無、出席者の有無など)を抽出するMySQLテーブルがあります。私に正しい結果を与えるが、私は学生を変更すると、そのは私の存在のために記録日間の正しい数を与えていない複数のPHPサブクエリで目的の結果が得られない

SELECT 
    COUNT(a_id), 
    (
    SELECT COUNT(*) FROM attendance 
    WHERE state = 'present' 
     AND `dater` BETWEEN '$a' AND '$b' 
) AS Count, 
    stud_id 
FROM attendance 
WHERE 
    stud_id =(SELECT id FROM users WHERE NAME = '$stud') 

:私は、次のクエリを書かれています。私はまだクエリにコースのパラメータを追加していないことを言及しない

enter image description here enter image description here

MySQLのテーブルには、次のとおりです。 がenter image description here

は私が(目的の結果を返すクエリの助けを必要と各生徒の現在の正確な日数をカウントするとともに、コースパラメータをクエリに追加して、特定の生徒、特定の期間の特定のコースの出席記録を検索するようにします。

答えて

0

あなたのクエリを区切るしたいように見える:

Select (select count(*) from <database>.attendance where state = 'present' AND (dater between '$a' and '$b') AND name=(SELECT id FROM users WHERE NAME = '$stud')) as present, (select count(*) from <database>.attendance where state = 'absent' AND (dater between '$a' and '$b') AND name=(SELECT id FROM users WHERE NAME = '$stud')) as absent from <database>.attendance WHERE stud_id =(SELECT id FROM users WHERE NAME = '$stud'); 

はこれを試してください:)

0

は、次のようにJOINを使用してそれを解決:あなたの助けのための

SELECT u.id, a.stud_id, a.course_id, count(*) FROM attendance a 
JOIN users u ON u.id=a.stud_id 
JOIN courses c ON c.c_id=a.course_id 
WHERE a.state='present' and dater between '2017-09-01' and '2017-09-14' 
GROUP BY a.stud_id, a.course_id; 

感謝を。

関連する問題