[SQL] Server loopt vast op SQL-query?
Elke deelnemer heeft records in de tabel deelname voor elke editie van het evenement dat hij zich opgegeven heeft.
De bedoeling is een lijst met deelnemers te genereren die zich nu opgegeven hebben (editie=14) èn die vorig jaar hebben meegereden (meegereden=1)
Ik heb daarvoor de onderstaande query gebakken:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
SELECT n.naam, n.plaats, n.inschrcode, d1.categorie, DATE_FORMAT(d1.inschrijfdatum,'%d-%m-%y') AS inschrijfdat
FROM naw AS n, deelname AS d1, deelname AS d2
WHERE n.PersID=d1.persID
AND n.PersID=d2.persID
AND d1.inschrijvingsstatus=1
AND d1.editie=14
AND d2.editie=13
AND d2.deelgenomen=1
ORDER BY d1.inschrijfdatum ASC
FROM naw AS n, deelname AS d1, deelname AS d2
WHERE n.PersID=d1.persID
AND n.PersID=d2.persID
AND d1.inschrijvingsstatus=1
AND d1.editie=14
AND d2.editie=13
AND d2.deelgenomen=1
ORDER BY d1.inschrijfdatum ASC
Het lijkt er niet op dat dit werkt, want ik krijg geen resultaat. De pagina lijkt maar te blijven laden. Er komt geen foutmelding, er gebeurt gewoon niets.
Hoe zou ik de query moeten veranderen om wel resultaat te krijgen?
Gewijzigd op 01/01/1970 01:00:00 door Josh
Quote:
SELECT n.naam, n.plaats, n.inschrcode, d1.categorie, DATE_FORMAT(d1.inschrijfdatum,'%d-%m-%y') AS inschrijfdat
FROM naw AS n, deelname AS d1, deelname AS d2
WHERE n.PersID=d1.persID
AND n.PersID=d2.persID
AND d1.inschrijvingsstatus=1
AND d1.editie=14
AND d2.editie=13
AND d2.deelgenomen=1
ORDER BY d1.inschrijfdatum ASC
FROM naw AS n, deelname AS d1, deelname AS d2
WHERE n.PersID=d1.persID
AND n.PersID=d2.persID
AND d1.inschrijvingsstatus=1
AND d1.editie=14
AND d2.editie=13
AND d2.deelgenomen=1
ORDER BY d1.inschrijfdatum ASC
Paar dingen die me opvallen:
> deelname AS d1, deelname AS d2 2x deelname tabel oproepen?
> Veel dingen worden niet opgeroepen in de query, maar wel in het WHERE-stuk gebruikt... Ik weet niet of dit werkt bij join queries?
Wat ik zou proberen:
Dat de velden die in de WHERE staan niet worden opgeroepen, is bij joinen van 2 tabellen geen probleem, waarom zou het bij 3 tabellen dan ineens wel een probleem zijn?
Ik weet niet of ik 3 tabellen wel op deze manier mag koppelen, dan zou daar dus het probleem zitten????
Jouw query-voorstel werkt prima, maar is niet het lijstje wat ik nodig heb. Je kijkt alleen naar editie 14. Ik wil alleen de mensen zien die in editie 13 hebben meegereden.
@Webmakerij:
Je link werkt wel, maar komt nergens op uit... ik zal eens daarop googelen en kijken wat ik ermee kan....
Gewijzigd op 01/01/1970 01:00:00 door Josh
Intussen heb ik in mijn eigen query een LIMIT 0,10 erbij gezet, en nou komt ie na 32 seconden met een (gedeeltelijk gewenst) resultaat.
Da's toch niet normaal???
Zo superingewikkeld zou het toch niet moeten zijn?
Hoe kan ik dit verbeteren. Toch de query op een andere manier opbouwen?
FROM naw AS n, deelname AS d1
WHERE n.PersID=d1.persID
AND ((d1.inschrijvingsstatus='1'
AND d1.editie=14)
OR (d1.editie=13
AND d1.deelgenomen='1'))
ORDER BY d1.inschrijfdatum ASC LIMIT 0, 25
Dingen die je kan gebruiken om je query sneller te maken:
> LIMIT lager zetten
> ORDER BY weghalen
> Minder tabellen gebruiken
> webserver het werk alten doen(dit word alleen een beetje ingewikkelt in PHP:P)
Edit:
Wat voor server is het? Voor een PII kan dit best normaal zijn:P
Edit:
Ik heb bij d1.inschrijvingsstatus en d1.deelgenomen '-jes gebruikt omdat ik ervanuitga dat je ENUM gebruikt:P
Edit:
Oja, hoeveelheid rijen in je tabel kan ook de snelheid bepalen :P
Gewijzigd op 01/01/1970 01:00:00 door Zero Dead
Misschien even een optimez en repair over je tabel heen?
Ik gebruik trouwens tinyINT voor die velden.
Bedankt voor de hulp!
Gebruik van ENUM zal dan al voor een (beetje) versnelling zorgen:)