Som maken van verschillende velden in een tabel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Brecht S

Brecht S

26/11/2014 17:32:54
Quote Anchor link
Ik heb volgende query:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$sql = "SELECT offertenr, SUM(tot_prijs) FROM offertes WHERE status = 'Hold' GROUP BY offertenr";


Het probleem is hier dat ik meerdere rijen krijg in mijn while loop. Dit mag niet gebeuren. Er moet gewoon een som gemaakt worden van het veld 'tot_prijs' in de offertes tabel waar alle offertenummers moeten samengezet worden en waar de status 'Hold' is. Een offertenummer kan meermaals voorkomen omdat alle lijnen apart worden opgeslagen met hetzelfde offertenummer.

Wie kan mij hiermee helpen?
Gewijzigd op 26/11/2014 18:13:44 door Brecht S
 
PHP hulp

PHP hulp

20/04/2024 00:48:16
 
Ivo P

Ivo P

26/11/2014 17:51:58
Quote Anchor link
optellen zal beter gaan als je de kolomnaam tot_prijs gebruikt, in plaats van de string 'tot_prijs': haal die quotes daar weg.

Als je het complete totaal wilt hebben, dan moet je niet de kolom offertenr in de SELECT opnemen, en kan ook de GROUP BY in zijn geheel vervallen.
 
Aad B

Aad B

26/11/2014 18:00:34
Quote Anchor link
Je query wordt dan:
SELECT SUM(tot_prijs)
FROM offertes
WHERE offertenr = 100
AND status = 'Hold'
 
Brecht S

Brecht S

26/11/2014 18:15:33
Quote Anchor link
@Ivo P: query aangepast. Inderdaad, had ik over het hoofd gezien maar werkt nog steeds niet met deze aanpassing alleen.

@ Aad: Ik wil hier niet het complete totaal hebben maar per offertenummer het totaal. Er zitten meerdere offertes in het systeem uiteraard. Dus ieder offertenummer mag maar 1 keer worden weergegeven met de daarbijhorende tot_prijs som.

Wat er wel belangrijk is:
Er zijn meerdere dezelfde offertenummers maar ook meerdere dezelfde statuscodes. Denk dat daar het probleem zit. Denk dat ik hier een dubbele query ineen nodig heb. Alleen weet ik totaal niet hoe ik die kan opbouwen.
Gewijzigd op 26/11/2014 18:23:18 door Brecht S
 
Aad B

Aad B

26/11/2014 18:53:54
Quote Anchor link
In dat geval is je eerste query gewoon juist.
SELECT offertenr, SUM(tot_prijs) FROM offertes WHERE status = 'Hold' GROUP BY offertenr
Hiermee krijg je:
per offertenummer het totaal voor de offertes die op 'Hold' staan.
 
Daan Slagter

Daan Slagter

26/11/2014 18:57:03
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$sql_sum
= mysql_query("
    SELECT offertenr, SUM(tot_prijs)
    FROM offertes
    WHERE status='HOLD'
    GROUP BY offertenr
"
);
?>


Deze zou moeten werken.
 
Brecht S

Brecht S

26/11/2014 19:05:23
Quote Anchor link
De query werkt zoals hij er nu staat maar ik krijg meerdere rijen terug vanuit de while/loop.
In theorie is dit wel juist maar mag niet in de praktijk. Ik heb momenteel verschillende offertenummers die goed gegroepeerd en samengeteld worden maar er zijn ook meerdere statussen die Hold zijn.
Het resultaat dat ik nu terugkrijg zijn 4 rijen en als ik in database kijk zijn er inderdaad 4 offertes die de status Hold hebben maar die statussen moeten ook nog een samengeteld worden.
 
Ivo P

Ivo P

26/11/2014 19:11:43
Quote Anchor link
je hebt er 4 die voldoen aan hold.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
offertnr  status       tot_prijs
123        Hold          100
123        x             200
456        Hold          300
789        Hold          400
999        Hold          500
999        Hold          600


Vertel maar wat je hier dan zou willen zien.

Ik vermoed namelijk dat wat jij wilt niet kan
 
Aad B

Aad B

26/11/2014 19:16:55
Quote Anchor link
"In theorie is dit wel juist maar mag niet in de praktijk", SQL technisch is het in theorie en praktijk juist. Kennelijk niet volgens de informatiebehoefte die jij moet invullen. Die moet je dus beter uitleggen hier. Wat wil je zien in dat ene record dat je terug wilt krijgen? Omschrijf het gewenste resultaat.
Gewijzigd op 26/11/2014 19:17:44 door Aad B
 
Brecht S

Brecht S

26/11/2014 19:17:20
Quote Anchor link
Dit is wat ik nu krijg als resultaat als we het voorbeeld van Ivo P volgen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
offertenr    status    tot_prijs
123           Hold        300
456           Hold        300
789           Hold        400
999           Hold        1100


Maar het moet dit zijn:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
offertenr    status    tot_prijs
--            Hold        2100


Offertenr speelt hier geen rol meer. Enkel de status 'Hold' is nog belangrijk anders is het niet mogelijk denk ik.
Gewijzigd op 26/11/2014 19:18:08 door Brecht S
 
Aad B

Aad B

26/11/2014 19:19:13
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT '--' as offertenr, 'Hold' as status, SUM(tot_prijs)
FROM offertes WHERE status = 'Hold'
GROUP BY offertenr;

of eigenlijk zoals ik al eerder aangaf:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT SUM(tot_prijs)
FROM offertes
WHERE status = 'Hold'
Gewijzigd op 26/11/2014 19:22:27 door Aad B
 
Brecht S

Brecht S

26/11/2014 19:22:05
Quote Anchor link
@Aad B: Met die -- bedoelde dat offertenr niet meer nodig is in de query denk ik omdat we daar geen resultaat meer zullen in hebben. Dus eigenlijk is het gewoon nog:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
status    tot_prijs
Hold         2100

Ik probeer even je nieuwe update uit.
Gewijzigd op 26/11/2014 19:23:00 door Brecht S
 
Aad B

Aad B

26/11/2014 19:23:19
Quote Anchor link
Die status hoef je ook niet mee te selecteren, die weet je al, dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT SUM(tot_prijs)
FROM offertes
WHERE status = 'Hold'
Gewijzigd op 26/11/2014 19:25:41 door Aad B
 
Brecht S

Brecht S

27/11/2014 10:39:13
Quote Anchor link
Ik heb enkele aanpassingen gedaan aan mijn gehele script en zit terug met een klein probleem. Post ik die nu best eens opnieuw of update ik beter deze vraag?
 



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.