2016-10-05 18 views
0

が表示されない:クエリは、私はこのようなクエリを構築する必要があり、右の結果

 SELECT 
      c.*, 
      (SELECT COUNT(cursus_id) FROM cursusdienst_bestellingen where cursus_id = c.id AND datum_afhaling IS NULL AND datum_verwijderd IS NULL AND studentid = '$studentid') as besteld, 
      (SELECT COUNT(cursus_id) FROM cursusdienst_bestellingen where cursus_id = c.id AND datum_afhaling IS NOT NULL AND datum_verwijderd IS NULL AND datum_afgehaald IS NULL AND studentid = '$studentid') as afhalen, 
      (SELECT datum_afhaling + INTERVAL 14 DAY FROM cursusdienst_bestellingen where cursus_id = c.id AND datum_afhaling IS NOT NULL AND datum_verwijderd IS NULL AND datum_afgehaald IS NULL AND studentid = '$studentid') as datum_afhaling, 
      (SELECT COUNT(cursus_id) FROM cursusdienst_bestellingen where cursus_id = c.id AND datum_afgehaald IS NOT NULL AND datum_verwijderd IS NULL AND cb.studentid = '$studentid') as afgehaald 
     FROM 
      cursusdienst c 
     LEFT JOIN 
      cursusdienst_bestellingen cb 
     ON 
      cb.cursus_id = c.id  
     WHERE 
      c.studierichting = '1ste Bachelor' 
     ORDER BY 
      c.artikel asc, cb.studentid 

これは、学生やコースの登録/注文システムです。このシステムを使っている学生がたくさんいます。受講者はコースを受講する前に登録する必要があります。 私は同じリストのすべての生徒のコースを見るので、ここで質問に問題があります。ここでは例:

Checkbox   Course    Price  Status 
Checkbox   Course 1   12.00  Ordered 
Checkbox   Course 1   12.00  Ordered 
Checkbox   Course 2   25.50  Ready to deliver 
Checkbox   Course 3   15.00  

あなたがここで見ると、クエリは、彼らはログインしてコースを注文している(それは単なる一例である)私の2人の学生のすべてのコース情報を示しています。 最初の生徒は2エンコース1を注文し、私は学生としてログインした場合は第二の生徒のみがコース1 を命じた(私が注文したコースでのみ、私の状況を見てみたいが、私は、同様のコースの残りを見ますコース3のようなステータスなしで)私は同じ形式で他のコースを注文することができます。 見たいと思わないものは他人の注文です!

だから、私は今それを注文することができますので、1と2コース3は、リストでもあるコースを注文したが、私は前に注文していなかった(そう、それは何の地位を持っていない、これだけなら、私、学生などを見てみたいです):

Checkbox   Course    Price  Status 
Checkbox   Course 1   12.00  Ordered 
Checkbox   Course 2   25.50  Ready to deliver 
Checkbox   Course 3   15.00  

私は、私は私の注文したコースではなく、私が注文していなかったコースの残りを見るWHEREに「AND cb.studentid = 『$のstudentid』」を追加した場合。

編集:(感謝SunKnight0)は、 "AND cb.studentid = '$ studentid'をON部分に設定し、WHERE部分には設定しません!だから、作業のコードを以下に示します。

 SELECT 
      c.*, 
      (SELECT COUNT(cursus_id) FROM cursusdienst_bestellingen where cursus_id = c.id AND datum_afhaling IS NULL AND datum_verwijderd IS NULL AND studentid = '$studentid') as besteld, 
      (SELECT COUNT(cursus_id) FROM cursusdienst_bestellingen where cursus_id = c.id AND datum_afhaling IS NOT NULL AND datum_verwijderd IS NULL AND datum_afgehaald IS NULL AND studentid = '$studentid') as afhalen, 
      (SELECT datum_afhaling + INTERVAL 14 DAY FROM cursusdienst_bestellingen where cursus_id = c.id AND datum_afhaling IS NOT NULL AND datum_verwijderd IS NULL AND datum_afgehaald IS NULL AND studentid = '$studentid') as datum_afhaling, 
      (SELECT COUNT(cursus_id) FROM cursusdienst_bestellingen where cursus_id = c.id AND datum_afgehaald IS NOT NULL AND datum_verwijderd IS NULL AND cb.studentid = '$studentid') as afgehaald 
     FROM 
      cursusdienst c 
     LEFT JOIN 
      cursusdienst_bestellingen cb 
     ON 
      cb.cursus_id = c.id AND cb.student_id = '$studentid' 
     WHERE 
      c.studierichting = '1ste Bachelor' 
     ORDER BY 
      c.artikel asc, cb.studentid 
+0

は、あなたが得ているものの例の結果を与えることができますし、何を得ることを期待しますか? – SunKnight0

+0

私はあなたのために私の質問を編集しました! – Brecht27

+0

クエリ結果にbested、afhalen、datum_afhaling、afgehaaldという3つのフィールドがあります。そのうちの3つは整数で、1つは日付でなければなりません。あなたの結果の例と一致するものはありません。 – SunKnight0

答えて

0
SELECT 
    c.*, 
    (SELECT COUNT(cursus_id) FROM cursusdienst_bestellingen where cursus_id = c.id AND datum_afhaling IS NULL AND datum_verwijderd IS NULL AND studentid = '$studentid') as besteld, 
    (SELECT COUNT(cursus_id) FROM cursusdienst_bestellingen where cursus_id = c.id AND datum_afhaling IS NOT NULL AND datum_verwijderd IS NULL AND datum_afgehaald IS NULL AND studentid = '$studentid') as afhalen, 
    (SELECT datum_afhaling + INTERVAL 14 DAY FROM cursusdienst_bestellingen where cursus_id = c.id AND datum_afhaling IS NOT NULL AND datum_verwijderd IS NULL AND datum_afgehaald IS NULL AND studentid = '$studentid') as datum_afhaling, 
    (SELECT COUNT(cursus_id) FROM cursusdienst_bestellingen where cursus_id = c.id AND datum_afgehaald IS NOT NULL AND datum_verwijderd IS NULL AND cb.studentid = '$studentid') as afgehaald 
FROM 
    cursusdienst c 
LEFT JOIN 
    cursusdienst_bestellingen cb 
ON 
    cb.cursus_id = c.id AND cb.studentid = '$studentid' 
WHERE 
    c.studierichting = '1ste Bachelor' 
ORDER BY 
    c.artikel asc, cb.studentid 
+0

astaxの提案に同じ結果を与えますか?それとも良いことですか? – Brecht27

+0

私はその質問を理解していません。ここに掲示された他の答えについてですか?私はそれが正しいとは思わないし、それは削除されているようだ。 – SunKnight0

+0

はい、今私は参照してください。削除されました。心配しないで...ここで私を助けてくれてありがとう;-) – Brecht27

関連する問題