PHP gevorderde |
|
Hallo
Voor een applicatie die ik moet maken beschik ik over een MS SQL server met allerlei data in.
Het bevat enkele tabellen.
--> In 1 tabel worden leerlingen bijgehouden
--> In 1 tabel worden klassen bijgehouden
--> In 1 tabel worden de leerlingen gekoppeld aan een klas, per schooljaar.
Nu moet ik alle leerlingen ophalen die binnen dat schooljaar aan een leerkracht gekoppeld zijn. (Dit kan verschillende klassen zijn).
Voor deze klassen heb ik reeds een array met de Ids..
SELECT leerlingen.id, leerlingen.stamboeknr, leerlingen.naam, leerlingen.voornaam, klassenperleerling.Klassen_id
FROM leerlingen
LEFT JOIN klassenperleerling ON leerlingen.id = klassenperleerling.leerlingen_id
WHERE Leerlingen.school_id = 2
AND klassenperleerling.Klassen_id = 45
OR klassenperleerling.Klassen_id = 46
OR klassenperleerling.Klassen_id = 47
OR klassenperleerling.Klassen_id = 48
OR klassenperleerling.Klassen_id = 49
OR klassenperleerling.Klassen_id = 50
OR klassenperleerling.Klassen_id = 51
OR klassenperleerling.Klassen_id = 52
OR klassenperleerling.Klassen_id = 53
OR klassenperleerling.Klassen_id = 54
OR klassenperleerling.Klassen_id = 55
OR klassenperleerling.Klassen_id = 56
OR klassenperleerling.Klassen_id = 57
OR klassenperleerling.Klassen_id = 58
OR klassenperleerling.Klassen_id = 59
OR klassenperleerling.Klassen_id = 60
OR klassenperleerling.Klassen_id = 61
OR klassenperleerling.Klassen_id = 62
OR klassenperleerling.Klassen_id = 63
OR klassenperleerling.Klassen_id = 64
OR klassenperleerling.Klassen_id = 65
OR klassenperleerling.Klassen_id = 66
OR klassenperleerling.Klassen_id = 68
OR klassenperleerling.Klassen_id = 69
ORDER BY naam asc
SELECT leerlingen.id, leerlingen.stamboeknr, leerlingen.naam, leerlingen.voornaam, klassenperleerling.Klassen_id FROM leerlingen LEFT JOIN klassenperleerling ON leerlingen.id = klassenperleerling.leerlingen_id WHERE Leerlingen.school_id = 2 AND klassenperleerling.Klassen_id = 45 OR klassenperleerling.Klassen_id = 46 OR klassenperleerling.Klassen_id = 47 OR klassenperleerling.Klassen_id = 48 OR klassenperleerling.Klassen_id = 49 OR klassenperleerling.Klassen_id = 50 OR klassenperleerling.Klassen_id = 51 OR klassenperleerling.Klassen_id = 52 OR klassenperleerling.Klassen_id = 53 OR klassenperleerling.Klassen_id = 54 OR klassenperleerling.Klassen_id = 55 OR klassenperleerling.Klassen_id = 56 OR klassenperleerling.Klassen_id = 57 OR klassenperleerling.Klassen_id = 58 OR klassenperleerling.Klassen_id = 59 OR klassenperleerling.Klassen_id = 60 OR klassenperleerling.Klassen_id = 61 OR klassenperleerling.Klassen_id = 62 OR klassenperleerling.Klassen_id = 63 OR klassenperleerling.Klassen_id = 64 OR klassenperleerling.Klassen_id = 65 OR klassenperleerling.Klassen_id = 66 OR klassenperleerling.Klassen_id = 68 OR klassenperleerling.Klassen_id = 69 ORDER BY naam ASC
Ik krijg 1318 waarden terug, dat klopt.. Maar hij staat toch wel een 30sec te laden..
Oorspronkelijk had ik een Query met 2 LEFT JOINS.. Omdat ik in principe ook de naam van de klas uit de tabel wil halen. Dit heb ik opgesplits door 1x alle klassen op te halen en in een array te steken (en dan zo om te zoeken.)..
Mijn vraag is nu, kan ik dat nog wat optimaliseren? Versnellen? De gegevens die ik ophaal zijn nu wel het minimum..
De bedoeling is ook dat er met Ajax dan gefilterd kan worden.. Maar dat zou normaal allemaal geen probleem mogen zijn eigenlijk. Het zijn NOG maar 1300 records...
EDIT: Er blijkt een fout te zitten. Ik mag nog maar 517 records hebben aangezien deze in school 2 zitten..
Tips zijn altijd welkom. Maar ik zal nog even verder zoeken.
EDIT 2: Haakjes rond de klas en de results zijn ok... Even zoeken hoe ik dat in codeigniter doe.
EDIT 3: Ik kan ook een limit opzetten en een paginanavigatie . Dat ik er zelf nog niet opgekomen was ;). Na wat verder opzoekwerk is query ook nog wat aangepast..
SELECT leerlingen.id, leerlingen.stamboeknr, leerlingen.naam, leerlingen.voornaam, klassenperleerling.Klassen_id
FROM leerlingen
LEFT JOIN klassenperleerling ON leerlingen.id = klassenperleerling.leerlingen_id
WHERE Leerlingen.school_id = 2 AND
klassenperleerling.Klassen_id IN (45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 68, 69)
ORDER BY naam asc
SELECT leerlingen.id, leerlingen.stamboeknr, leerlingen.naam, leerlingen.voornaam, klassenperleerling.Klassen_id FROM leerlingen LEFT JOIN klassenperleerling ON leerlingen .id = klassenperleerling .leerlingen_id WHERE Leerlingen.school_id = 2 AND klassenperleerling.Klassen_id IN (45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 68, 69) ORDER BY naam asc
mod edit: query op meerdere regels voor leesbaarheid
|