MySQL GROUP BY

Status
Niet open voor verdere reacties.

georgeboot

Gebruiker
Lid geworden
3 jan 2007
Berichten
70
Hallo Forum-ers!

Ik heb een probleem: ik heb in mijn database allemaal records met melkgegevens. Allemaal leveringen van verschillende boeren. NU wil ik per boer het totaal aantal liters melk hebben.
Ik probeer dit te realiseren via: [SQL]SELECT `id`, SUM(liters) FROM `leveringen` WHERE `boer` = 1 GROUP BY `id`[/SQL]
Dit wil alleen niet werken!
Als ik de query uitvoer in PHP, en hem weergeef via print_r krijg ik het volgende:
Code:
Array
(
    [id] => 1
    [SUM(liters)] => 8
)

Terwijl er in de database een stuk of 100 records staan waar boer = 1.. Het totale aantal liters van boer1 moet naar mijn schattingen ongeveer rond de 1000 liggen.. Het eerste record in de database bedraagt 8 liter, en die geeft hij alleen weer..

Heeft iemand enig idee hoe ik dit toch op ga lossen? Alvast heer hartelijk bedankt!
 
Laatst bewerkt:
Om te beginnen ben je op zoek naar een totaal per boer, niet per id. Verder wil je groeperen op boer, niet op id.

Verder kun je niet zomaar print_r gebruiken op een mysql resultaat in php. Dit kan alleen als je eerst door de resultset gaat om alles in een nieuwe array te zetten. Bij het maken van de juiste query kun je beter gebruik maken van phpmyadmin of een vergelijkbaar stukje software.
 
Twee dingen:

1: Je groepeert op "ID". Dat betekend dat de uitkomsten van alle rijen waarbij ID hetzelfde is worden opgeteld. Daar ID als het goed is uniek is, betekend het dus dat er niks opgeteld wordt, en je gewoon de rijen terugkrijgt.

2: Je neemt alleen "Where Boer = 1" dus alleen de rijen van boer 1 komen terug. Als je ze allemaal wilt, zul je je Where wat moet verbreden.

Probeer dit eens:

[sql]
SELECT `boer`, SUM(liters) FROM `leveringen` GROUP BY `boer`
[/sql]
 
Een stukje uit de tabel leveringen:
PHP:
array(
  array('id'=>1,'datum'=>'2010-03-11','tijd'=>'11:27:00','liters'=>8,'boer'=>1,'monster'=>0,'opmerkingen'=>''),
  array('id'=>2,'datum'=>'2010-03-11','tijd'=>'17:20:00','liters'=>378,'boer'=>2,'monster'=>54654,'opmerkingen'=>''),
  array('id'=>3,'datum'=>'2010-03-11','tijd'=>'17:20:00','liters'=>1178,'boer'=>1,'monster'=>74479,'opmerkingen'=>'')
);

Ik wil dat van de huidige ingelogde boer (in het voorbeeld is dat boer met ID 1) de totaal aan geleverde melk weergegeven word.

Als ik alleen het stukje uit de array hierboven in de database heb, krijg ik de 8 als resultaat. Zo goed als ik zelf kan rekenen, zal het totaal van alle liters van boer 1, 1186 moeten zijn.
In mijn database is de rij met ID een index met auto increment.

Is het zo iets duidelijker wat ik wil?
 
Laatst bewerkt:
Bedankt voor de hulp! Het is voor het eerst dat ik deze SQL functie gebruik, maar nu is deze mij duidelijk.
Wat ik nu gebruik:
PHP:
$totaal_geleverd = "SELECT `boer`, SUM(liters) FROM `leveringen` GROUP BY  `boer`";

Nogmaals bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan