[SQL] Server loopt vast op SQL-query?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Josh

Josh

13/01/2007 22:13:00
Quote Anchor link
Ik heb een tabel met deelnemers (naw) en een tabel met deelnamegegevens (deelname)

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



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

PHP hulp

24/11/2024 04:00:40
 
Zero Dead

Zero Dead

13/01/2007 22:27:00
Quote Anchor link
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


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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
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
WHERE n.PersID=d1.persID
AND d1.inschrijvingsstatus=1
AND d1.editie=14
AND d1.deelgenomen=1
ORDER BY d1.inschrijfdatum ASC LIMIT 0,10
?>
 

13/01/2007 22:28:00
Quote Anchor link
MySQL QueryBrowser downloaden
en daar query in uitvoeren.
Loopt hij daar ook in vast?
 
Josh

Josh

13/01/2007 22:43:00
Quote Anchor link
@ZeRoDeaD: Ik roep inderdaad 2x de deelnametabel op, omdat ik gegevens van editie 14 en gegevens van editie 13 nodig heb.

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
 

13/01/2007 22:46:00
Quote Anchor link
**** zit ergens nog een foutje in de code zie ik; correcte link http://dev.mysql.com/downloads/gui-tools/5.0.html
 
Josh

Josh

13/01/2007 23:09:00
Quote Anchor link
Oke, bezig met downloaden ;-)

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?
 
Zero Dead

Zero Dead

13/01/2007 23:25:00
Quote Anchor link
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
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
 

13/01/2007 23:50:00
Quote Anchor link
Misschien even een optimez en repair over je tabel heen?
 
Josh

Josh

13/01/2007 23:57:00
Quote Anchor link
Ik ga even met de query van ZeRoDeaD aan de gang... Het lijkt me dat de deelnemers nu 2x als resultaat gegeven worden, maar dat kan wel weer opgelost worden met group by.

Ik gebruik trouwens tinyINT voor die velden.

Bedankt voor de hulp!
 
Zero Dead

Zero Dead

14/01/2007 00:03:00
Quote Anchor link
Gebruik van ENUM zal dan al voor een (beetje) versnelling zorgen:)
 



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.