Hoi, ik heb een lekker simpel tabelletje :
dag date
produkt_ID bigint
prijs decimal

Voor elk produkt zijn de (dag)prijzen op meerdere dagen ingevoerd

Nu wil ik een historisch overzicht maken van de prijzen , maar dan telkens van een combinatie van 2 produkten en wat de prijs van die 2 samen was
(bv. produkt_ID 12 en 15 )
<?
$q="
SELECT dag ,sum(prijs) AS prijssamen
FROM prprijzen
WHERE produkt_ID='12' OR produkt_ID='15'
GROUP BY dag";
?>

Werkt prima, behalve als ik van 1 van de 2 produkten op een dag geen prijs heb ! Die moet overgeslagen worden ! (ik heb niets aan de prijs van 1 apart)
Hoe doe ik dat ?
AND prijs > 0
Ik heb nu :
<?
$q="
SELECT dag ,sum(prijs) AS prijssamen
FROM prprijzen
WHERE prijs > 0 AND
produkt_ID='12' OR produkt_ID='15'
GROUP BY dag";
?>

Nee, helaas hij geeft nog steeds ook de dagen waarop maar 1 van de 2 bestaat !
(ja , want de prijs die die wel heeft is > 0 )
??
ruud schreef op 19.08.2006 11:00
behalve als ik van 1 van de 2 produkten op een dag geen prijs heb

Géén prijs staat hier.
Tip: Als je .. AND .. OR .. gebruikt, gebruik dan ( en ) om aan te geven welke bij elkaar horen. Dus ... AND ( ... OR ... ) of ( ... AND ... ) OR ...

Edit: Aangepast.
@SanThe Ja, () die had ik ook
Maar heb al veel geprobeerd (kan het wel ?)

<?
$q="
SELECT dag ,sum(prijs) AS prijssamen
FROM prprijzen
WHERE (prijs > 0 AND produkt_ID='12' ) OR
( prijs > 0 AND produkt_ID='15' )
GROUP BY dag";
?>
Geeft zelfde resultaat , kan ook niet goed zijn!?

de op dag gegroepeerde resultaten moet dus 2 per dag zijn. is het er maar 1 op die dag dan wil ik die niet !
Maar hoe zeg je dat in MySQL ??

Nb. ik had al wel een oplossing in php bedacht maar lijkt me beter in sql . . . .
Ik ben niet zo'n ster in SQL maar ik zou 'm zo maken.
Dus SUM met hoofdletters en geen quotes om de getallen en de WHERE wat korter.
<?
$q="
SELECT dag ,SUM(prijs) AS prijssamen
FROM prprijzen
WHERE prijs > 0 AND (produkt_ID=12 OR
produkt_ID=15)
GROUP BY dag";
?>
Je orginele query met daarachter:

HAVING prijs > 0


/edit Ik denk trouwens dat WHERE gewoon kan omdat het om één van de prijzen gaat en niet de som
SanThe de query werkt wel (die quotes had ik origineel niet hoor) maar doet niet wat bedoeling is, hij geeft gewoon een prijs als er maar 1 van de twee (op die dag) bestaat.

Bestond er ook niet iets waarmee je het aantal per GROUP kon tellen ? Dan kan je er iets aan vastplakken van " AND COUNT(GROUP) >= 2 " ??

"Als iets simpel lijkt, betekend dat nog niet dat het ook simpel is . . . . "
/edit moment

WHERE prijs > 0
GROUP BY dag
HAVING COUNT(*) > 1
Ga ik even proberen

(sorry , duurde even, mijn phpadmin loopt weleens kompleet vast als ik een niet complete sql intyp )

Heel Mooi, dat having was me compleet ontschoten

Dank je Phperik

Ik zal hem nu niet meer vergeten, die komt vast wel vaker te pas

<?
$q="
SELECT dag ,SUM(prijs) AS prijssamen
FROM prprijzen
WHERE produkt_ID=12 OR produkt_ID=15
GROUP BY dag
HAVING COUNT(*) > 1";
?>

(dat prijs>0 kan er dus uit)

Reageren