Hoi,

Ik heb een bepaalde loop.

mysql_query met een DISTINCT. Hierin worden unieke gebruikers geselecteerd.
Vervolgens komt er een while loop voor die output. Daarin wordt wordt dan per gebruiker
gekeken hoeveel resultatie diegene heeft.
Omdat ik dit resultaat niet kan sorteren, wil ik in de while loop eerst alles in een array zetten
en dat dan sorteren en pas dan echoeen.

Ik heb echter geen idee hoe je dat dan doet...

De code is:

<?php
$query_names = mysql_query("select DISTINCT NAAM FROM TABLE ORDER BY NAAM ASC");

$i = 0;
while ($totaal = mysql_fetch_array($query_names)) {

$ad = $totaal['naam'];
$resultaat = mysql_query("SELECT * FROM NAAM WHERE naam = '$ad'");
$query_all = mysql_fetch_array($resultaat);
$cijfertotaal = mysql_num_rows($resultaat);

[hier moet een array opgebouwd worden]
Die moet dan gevuld worden met NAAM en AANTAL

$i++;
}
?>

Wellicht kan het geheel helemaal anders maar mijn kennis is helaas ook maar enigzins beperkt...
Misschien dus 1 sql query? Het is dus 1 tabel. Uiteindelijk moet ik dan weten hoevaak een naam een record heeft.
en sortering moet op het aantal zijn zodat de hoogste bovenaan staat.

Iemand een idee?
>>Qua query performance zie ik geen probleem. MySQL is snel en ik mag aannemen dat de interne SQL optimizer z'n werk doet.

Dat is een verkeerde aanname, als je een explain voor de query zet zal je zien dat je in totaal 10! tabellen daarin hebt.
Daarnaast zijn subqueries (virtuele tabellen) niet geindexed.
Kan je nagaan hoe snel de database is! :)

In mijn voorbeeld gebruik ik helemaal geen indexen. Die kun je eventueel toevoegen als je om extra performance verlegen zit. En wellicht is de query nog compacter te schrijven, alle wegen leiden naar Rome. Ik was met een klein kwartiertje klaar, en het principe is duidelijk. Tijd is ook van waarde.

Eerlijk gezegd heeft het er misschien mee te maken dat ik onlangs weer eens met Microsoft Access moest werken, met een paar honderd tabellen die allemaal afzonderlijk met een eigen OLE DB driver werkten, CSV als storage engine hadden en geen van alle indexen hadden. En zelfs in die situatie was de performance geen probleem met een query zoals mijn laatste query. Daarom maak ik me geen zorgen.

Het is wel teleurstellend om te horen dat de SQL optimizer van MySQL weinig bijdraagt. Niet dat ik het mis, maar het is weer een beperking van MySQL. Aan de andere kant is een query die handiger geschreven kan worden gewoon voor verbetering vatbaar, ik hoopte al op dergelijke reactie op het forum.
Dan nu de uitdaging hoe mijn voorbeeld verbeterd kan worden (als het inderdaad oplevert wat de vragensteller bedoelt). Als ik weer een kwartiertje tijd heb.

Reageren