passero
Legacy Member
Mijn vriendin is leerkracht en ik ben nu iets aan het schrijven voor haar om haar punten beter te beheren want dat systeem dat ze opt school krijgen trekt op de ballen.
Nu, ik ben bezig met het schrijven van een query waarmee de punten van een bepaalde test getoond worden. Op zich niet moeilijk maar ik moet rekening houden dat er leerlingen kunnen bijkomen bij de klas en daar wordt het moeilijk.
Mijn datamodel:
punten (id,lln_id,punt,test_id)
leerlingen (id,klas_id)
klassen (id)
er zijn nog andere velden maar deze zijn belangrijkst.
Momenteel heb ik deze query:
HEt lijkt me nogal ingewikkeld voor wat ik moet doen.
DE query is voor een mysql db maar gezien ik dagdagelijks in een oracle omgeving programmeer gebruik ik geen inner of outer joins maar zet ik die dingen gewoon in de where clause.
Ik heb wel al eens geprobeerd door een query te schrijven die de leerlingen van een klas toont en dan via een outer join naar de punten te gaan maar dit geeft ook problemen gezien ik eigenlijk ook de test_id als parameter moet meegeven. Vandaar dat ik gewerkt heb met eerst de leerlingen te tonen die deelgenomen hebben aan de test en dan via een union de leerlingen toevoegen die niet deelnemen maar voor die laatste moet ik OPNIEUW de query runnen voor de leerlingen te zoeken die eraan deelgenomen hebben.
Wat ik ook gedacht heb, is gewoon op het scherm een lijst tonen van de leerlingen en dan per leerling een functie oproepen die het punt ophaalt voor die leerling voor die test. HEt nadeel is hiervan dat ik als er 20 lln zijn, ik ook 20 keer een query moet uitvoeren voor het punt te vinden. Das niet zo performant maar wel een gemakkelijke oplossing.
Ik zou het dus liever in1 query hebben.
Iemand enige tips...
Nu, ik ben bezig met het schrijven van een query waarmee de punten van een bepaalde test getoond worden. Op zich niet moeilijk maar ik moet rekening houden dat er leerlingen kunnen bijkomen bij de klas en daar wordt het moeilijk.
Mijn datamodel:
punten (id,lln_id,punt,test_id)
leerlingen (id,klas_id)
klassen (id)
er zijn nog andere velden maar deze zijn belangrijkst.
Momenteel heb ik deze query:
Code:
select p.*,lln.naam from punten p,leerlingen lln,klassen k
where p.lln_id = lln.id
and k.id = lln.klas_id
and k.id = 1
union
select null,null,null,null, lln.naam from leerlingen lln,klassen k
where lln.klas_id = k.id
and k.id = 1
and lln.id not in
(select p.lln_id from punten p,leerlingen lln,klassen k
where p.lln_id = lln.id
and k.id = lln.klas_id
and k.id = 1)
HEt lijkt me nogal ingewikkeld voor wat ik moet doen.
DE query is voor een mysql db maar gezien ik dagdagelijks in een oracle omgeving programmeer gebruik ik geen inner of outer joins maar zet ik die dingen gewoon in de where clause.
Ik heb wel al eens geprobeerd door een query te schrijven die de leerlingen van een klas toont en dan via een outer join naar de punten te gaan maar dit geeft ook problemen gezien ik eigenlijk ook de test_id als parameter moet meegeven. Vandaar dat ik gewerkt heb met eerst de leerlingen te tonen die deelgenomen hebben aan de test en dan via een union de leerlingen toevoegen die niet deelnemen maar voor die laatste moet ik OPNIEUW de query runnen voor de leerlingen te zoeken die eraan deelgenomen hebben.
Wat ik ook gedacht heb, is gewoon op het scherm een lijst tonen van de leerlingen en dan per leerling een functie oproepen die het punt ophaalt voor die leerling voor die test. HEt nadeel is hiervan dat ik als er 20 lln zijn, ik ook 20 keer een query moet uitvoeren voor het punt te vinden. Das niet zo performant maar wel een gemakkelijke oplossing.
Ik zou het dus liever in1 query hebben.
Iemand enige tips...