Goeden dag,

Ik had een vraagje, ik heb een database met 2 tabellen:
TABEL 1
id
num

TABEL 2
idRef
user

In "num" staan getallen met en zonder . en , (vb: 0.01 of 0,01 of 2.02 maar ook 2.00003)
"id" en "idRef" zijn gewoon id's
en "user" zijn namen.

nou wil ik weten welke user het laagste unieke getal heeft.
Daarom zet ik het eerst in een array op de volgende manier maar dat gaat ZEER langzaam hoe kan ik dit optimaliseren?
Ook als iemand een beter manier weet om achter het laasgte unieke nummer te komen hoor ik dat graag.

<?
$users = array();
$i = 0;
$db = new dbLayer(DBHOST, DBUSER, DBPASSWD, DBNAME);
$sql = "SELECT n.num, u.idRef FROM num_tablen, user u  WHERE u.idRef = n.id";
if($db->query($sql) < 0) die("Mysql error: ".mysql_error());
while($row=$db->fetch()){
	$users[$i] = $row['bod'];
	$i++;
}
?>



Mvg,

Je kunt toch gewoon de MIN functie van MySQL gebruiken?
[edit]
SELECT MIN(tabel1.nummer) AS laagste
FROM tabel1
WHERE tabel1.id = tabel2.idref
GROUP BY tabel1.id
[/edit]
yoram schreef op 04.10.2007 18:01
In "num" staan getallen met en zonder . en , (vb: 0.01 of 0,01 of 2.02 maar ook 2.00003)

Een getal heeft NOOIT een komma in zich.
Jan Koehoorn schreef op 04.10.2007 18:05
Je kunt toch gewoon de MIN functie van MySQL gebruiken?
[edit]
SELECT MIN(tabel1.nummer) AS laagste
FROM tabel1
WHERE tabel1.id = tabel2.idref
GROUP BY tabel1.id
[/edit]


Het probleem is echter dat ik het unieke laagste getal wil hebben dus als een getal 2 of meer keer voorkomt wil ik die niet hebben.

SanThe schreef op 04.10.2007 18:11

Een getal heeft NOOIT een komma in zich.

Het veld is een varchar, en ik zou eventueel eerst alle komma's in punten kunnen veranderen.
Het veld is een varchar
Dat is dan niet goed, getallen sla je nooit op in een VARCHAR. Of zie jij één en twee ook als getallen?


SELECT 'één' + 'twee' AS result


Voor het unieke laagste getal, heb je een COUNT() nodig met een GROUP BY. Maak groepjes per getal en tel het aantal dat in dit groepje staat. Het laagste getal dat slechts 1x voorkomt, die moet je hebben.

Tot zo ver de theorie, ik ga nu koken! Verrek van de honger.
Het veld is een varchar, en ik zou eventueel eerst alle komma's in punten kunnen veranderen.
Getallen staan dan ook nooit in een VARCHAR! Een getal sla je op in een INT of DECIMAL veld, alleen dan is het mogelijk om de MIN() functie van de database juist te gebruiken.

Voor het unieke laagste getal uit, hoef je enkel de GROUP BY uit de query van Jan te halen. MIN() resulteert dan namelijk maar in 1 waarde, de laagste waarde. Het ophalen van andere kolommen is dan niet meer mogelijk, aangezien je onbetrouwbare resultaten krijgt als de laagste waarde meerdere keren voorkomt. Hoogstwaarschijnlijk zal MySQL hier ook wel een foutmelding over geven.

[edit]Vraag verkeerd gelezen, oplossing van Frank hierboven is de juiste![/edit]
[quote='pgFrank schreef op 05.10.2007 01:00']

Tot zo ver de theorie, ik ga nu koken! Verrek van de honger.



was et lekker;)


enne bedankt voor de hulp!

inderdaad niet slim om in een varchar op te slaan maar de tabel werd eerst voor iets ander gebruikt heb hem toen een beetje aangepast en vergeten varchar naar INT te zetten.
Blanche schreef op 05.10.2007 01:04
Hoogstwaarschijnlijk zal MySQL hier ook wel een foutmelding over geven.
Blanche toch! Jij zou toch beter moeten weten! MySQL heeft een broertje dood aan foutmeldingen en probeert te raden wat jij vandaag met de database van plan bent. Creativitijd kent geen tijd...

(pfff, zware dag achter de rug)

Reageren