[SQL] Aantal selecteren van hoogste ronde

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Thijs X

Thijs X

09/04/2007 18:52:00
Quote Anchor link
Hallo Allemaal

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

PHP hulp

19/04/2024 13:19:48
 
Dennis Jongerden

Dennis Jongerden

09/04/2007 19:03:00
Quote Anchor link
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..
 
Joren de Wit

Joren de Wit

09/04/2007 19:10:00
Quote Anchor link
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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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

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.
 
Stijn

stijn

09/04/2007 20:09:00
Quote Anchor link
Volgensmij kan het wel in een query, als je php maar wat meer laat doen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
?>
 
Thijs X

Thijs X

10/04/2007 10:04:00
Quote Anchor link
Bedankt voor jullie reactie's. Het is gelukt op de manier van Blanche + nog een Query.
 
Frank -

Frank -

10/04/2007 11:53:00
Quote Anchor link
@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.

Succes!
 
Danny K

Danny K

10/04/2007 12:45:00
Quote Anchor link
lol, Frank is weer langs geweest :-/ :-p
 
Thijs X

Thijs X

10/04/2007 13:15:00
Quote Anchor link
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;
 
Frank -

Frank -

10/04/2007 13:29:00
Quote Anchor link
;)

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.
 
Thijs X

Thijs X

10/04/2007 13:39:00
Quote Anchor link
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.


Ja zo heb ik het uiteindelijk ook gedaan ^^ maar het was te proberen
 



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.