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
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..
Het is inderdaad niet mogelijk in 1 query. Je zult namelijk voor de ene query een GROUP BY clause moeten gebruiken om te groeperen op item. Maar zodra je dit doet kun je in diezelfde query geen gegevens opvragen over alle records samen.
SELECT
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.
Volgensmij kan het wel in een query, als je php maar wat meer laat doen.
<?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;
?>
@Stijn: Ga je eens verdiepen in SQL, dan zul je zelf ook zien dat jouw oplossing niet zo handig. Waarom zou je in hemelsnaam alle records ophalen, terwijl je wilt weten wat het hoogste record is? Dat kan er hooguit 1 zijn en met de functie MAX() heb je deze er zo uitgeplukt. Daar valt dus niets aan te sorteren. In jouw 'oplossing' was het slimmer geweest om een LIMIT 1 toe te voegen, dat had de resultaten flink beperkt, maar ook dat is slechts een lapmiddel.
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.
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