[SQL] Aantal selecteren van hoogste ronde
Zit met het volgende probleem,
wil een aantal dingen uitrekenen uit mijn database
- Hoogste ronde per item
- Totaal van alle rondes per item
- Totaal van alles
Database ziet er alsvolgt uit
item_id | ronde | naam
1 | 1 | blabla5 |
1 | 1 | blabla4 |
1 | 2 | blabla3 |
1 | 2 | blabla2 |
1 | 2 | blabla2 |
1 | 1 | blabla1 |
3 | 1 | blabla |
3 | 1 | blabla |
Nu wil ik dus dat hij weergeeft bijvoorbeeld:
Hoogste ronde van item2: 2
Totaal van de hoogste ronde: 3
etc.
Dit moet allemaal in 1 query kunnen denk ik maar ik kom er maar niet uit.
Gewijzigd op 01/01/1970 01:00:00 door Thijs X
Ik vrees dat dit lastig in een keer te doen is. Misschien eerst een SELECT DISTINCT op de item id's, dan in een while loop een tweede query met een SELECT COUNT(*) as cnt en dan GROUP BY item..
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
SELECT
item_id,
MAX(ronde) AS hoogste_per_item,
SUM(ronde) AS totaal_per_item
FROM
tabel
GROUP BY
item_id
item_id,
MAX(ronde) AS hoogste_per_item,
SUM(ronde) AS totaal_per_item
FROM
tabel
GROUP BY
item_id
Deze query levert dus de hoogste waarde voor 'ronde' per item en de som van alle 'rondes' per item.
Als je de GROUP BY clause weglaat heb je de query die over alle records in je tabel gaat.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$sql="SELECT ronde FROM tabel WHERE naam='item2' ORDER BY `ronde` DESC"
$resultaat=mysql_query($sql);
$ronde=mysql_fetch_assoc($resultaat);
$hoogste=$ronde['ronde']['0'];
echo "De hoogste ronde bij item2 is".$hoogste;
?>
$sql="SELECT ronde FROM tabel WHERE naam='item2' ORDER BY `ronde` DESC"
$resultaat=mysql_query($sql);
$ronde=mysql_fetch_assoc($resultaat);
$hoogste=$ronde['ronde']['0'];
echo "De hoogste ronde bij item2 is".$hoogste;
?>
Bedankt voor jullie reactie's. Het is gelukt op de manier van Blanche + nog een Query.
Met SQL stel je een vraag aan de database. Een vraag als 'doe mij alle records maar en ik zoek zelf wel uit wat ik echt nodig heb' is niet zo slim. Sla er eens wat handleidingen op na (b.v. PostgreSQL of MySQL) om een idee te krijgen van de vele functies die je standaard tot jouw beschikking hebt. Daarnaast kun je zelf ook nog functies in SQL schrijven, stored procedures, dat scheelt weer een hoop werk in PHP en kan de boel ook flink versnellen.
Verder mag ik hopen dat die backtics ` tikfouten zijn en dat je normaal wel aan foutafhandeling doet.
Succes!
lol, Frank is weer langs geweest :-/ :-p
Danny Koppel schreef op 10.04.2007 12:45:
lol, Frank is weer langs geweest :-/ :-p
Ah had eigenlijk wel verwacht van Frank dat hij met een super query kwam zodat het toch in 1 query kan p;
Helaas, dat zal niet gaan, is gewoon niet mogelijk.
Je kunt wel een procedure schrijven die dit (voor de buitenwereld) doet, maar ook die zal intern 2 queries moeten uitvoeren. Gebruik gewoon aparte queries (of aparte procedures), daarmee kan het gewoon niet fout gaan.
Frank schreef op 10.04.2007 13:29:
;)
Helaas, dat zal niet gaan, is gewoon niet mogelijk.
Je kunt wel een procedure schrijven die dit (voor de buitenwereld) doet, maar ook die zal intern 2 queries moeten uitvoeren. Gebruik gewoon aparte queries (of aparte procedures), daarmee kan het gewoon niet fout gaan.
Helaas, dat zal niet gaan, is gewoon niet mogelijk.
Je kunt wel een procedure schrijven die dit (voor de buitenwereld) doet, maar ook die zal intern 2 queries moeten uitvoeren. Gebruik gewoon aparte queries (of aparte procedures), daarmee kan het gewoon niet fout gaan.
Ja zo heb ik het uiteindelijk ook gedaan ^^ maar het was te proberen