Query probleem met inloggen meerdere studenten in een reservatiesysteem
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
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
Het betreft hier een reservatie/bestellingsdienst voor studenten die aan de universiteit cursussen kunnen bestellen/reserveren. Er zijn dus meerdere studenten die inloggen, en na inloggen kunnen bestellen.
Maar het gaat fout want ik krijg meerdere resultaten van elke bestelling door elkaar.
De studentid is de id die ik terugkrijg na inloggen in het systeem. Dus ik wil maar enkel mijn eigen bestellingen zien met de bijhorende status en niet de resultaten van anderen.
In de tabel cursusdienst staan alle cursussen die te reserveren zijn en in de tabel cursusdienst_bestellingen alle bestellingen van de studenten.
Wat ik nu te zien krijg is:
Code (php)
1
2
3
4
5
2
3
4
5
Checkbox Artikel Prijs Status
Checkbox Belgisch publiekrecht 12.00 Besteld
Checkbox Belgisch publiekrecht 12.00 Besteld
Checkbox Rechtsgeschiedenis 25.50 Af te halen
Checkbox Syllabus 15.00
Checkbox Belgisch publiekrecht 12.00 Besteld
Checkbox Belgisch publiekrecht 12.00 Besteld
Checkbox Rechtsgeschiedenis 25.50 Af te halen
Checkbox Syllabus 15.00
Dit is een voorbeeld van 2 studenten die ingelogged zijn in het systeem en een bestelling hebben achtergelaten.
Student 1 heeft Belgisch publiekrecht en Rechtgeschiedenis besteld
Student 2 heeft Belgisch publiekrecht besteld
Cursus Syllabus staat ook in de lijst omdat die ook in de tabel cursusdienst zit en ik deze nog niet heb besteld (maar die heeft ook geen status omdat die nog is besteld en dat is normaal).
Dus zoals je kan zien krijg ik dat door elkaar wat dus niet juist is want student 1 mag enkel zijn resultaten zien en student 2 ook enkel de zijne.
OPLOSSING:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
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
Dus de cb.studentid = '$studentid' moet je toevoegen aan de ON en niet aan de WHERE clause.
Gewijzigd op 06/10/2016 10:24:42 door Brecht S
Mis je niet een regel in je query met WHERE cb.studentid = HUIDIG_INGELOGD_ID? Waar je HUIDIG_INGELOGD_ID ergens uit je cookie/sessie of database haalt.
Toevoeging op 06/10/2016 10:22:25:
Het is opgelost: ik moest de AND cb.studentid = '$studentid' toevoegen aan de ON ipv aan de WHERE clause. Nu werkt het wel.
Gewijzigd op 05/10/2016 22:10:25 door Brecht S