Query probleem met inloggen meerdere studenten in een reservatiesysteem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Brecht S

Brecht S

04/10/2016 16:42:03
Quote Anchor link
Ik heb volgende query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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


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)
PHP script in nieuw venster Selecteer het PHP script
1
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    

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)
PHP script in nieuw venster Selecteer het PHP script
1
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

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
 
PHP hulp

PHP hulp

26/04/2024 20:09:35
 
Gerhard l

gerhard l

05/10/2016 15:02:31
Quote Anchor link
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.
 
Brecht S

Brecht S

05/10/2016 21:28:24
Quote Anchor link
Als ik deze toevoeg aan mijn WHERE: c.studierichting = '1ste Bachelor' AND cb.studentid = '$studentid' dan krijg ik enkel maar mijn eigen gereserveerde cursussen en niet degene die ook in de tabel zitten die ik niet heb gereserveerd. Uiteraard hebben die laatste dan wel geen status maar dat is normaal.

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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.