Group by en limit probleem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Henk de Vriep

Henk de Vriep

20/10/2014 16:48:28
Quote Anchor link
Ik heb de volgende tabel

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
ORDERS
id| cust | ispaid |
__|______|________|
1 | A    | 1      |
2 | B    | 1      |
3 | C    | 1      |
4 | D    | 1      |
5 | D    | 0      |
6 | E    | 0      |
7 | E    | 0      |
8 | E    | 0      |
9 | F    | 0      |
10| G    | 1      |


Nu wil ik van de laaste 10 orders zien hoeveel orders er niet betaald zijn. In het bovenstaande voorbeeld zou dit getal wat er uit moet komen dus 2 zijn (customer E en F). Customer D niet want die heeft wel in ieder geval 1 wel betaalde order.

Ik gebruikte de volgende query:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT id,ispaid FROM orders WHERE `ispaid` = '0' GROUP BY `cust` LIMIT 0,10


Alleen krijg ik nu alle klanten die een order hebben die niet betaald is. Wat kan ik in de query veranderen zodat ik alleen met deze voorbeeld tabel customer E en F als output krijg?

Alvast bedankt voor jullie hulp.
Gewijzigd op 20/10/2014 16:48:54 door Henk de Vriep
 
PHP hulp

PHP hulp

05/11/2024 11:55:00
 
Pipo Clown

Pipo Clown

20/10/2014 17:25:21
Quote Anchor link
hoe wil je, zonder datum-tijd vermelding bepalen wat de laatste 10 orders zijn ?
Op de ID's kun je niet vertrouwen, na database onderhoud kunnen lege gaten weer opgevuld worden.
 
Ivo P

Ivo P

20/10/2014 17:49:11
Quote Anchor link
aangenomen dat sorteren op ID voldoet:

Je moet dus achterhalen
- wat zijn de laatste 10 orders
- welke user heeft niets betaald.

stap 1:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT cust, ispaid FROM orders ORDER BY id DESC LIMIT 10




Dan heb je dus de dataset die je moet onderzoeken. Voor het gemak: denk even dat dit de tabel dataset10 zou zijn/

stap 2:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT cust, SUM(ispaid) AS betaald
FROM dataset10
GROUP BY cust
HAVING SUM(ispaid) =  0


nu die 2 in elkaar schuiven:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT cust, SUM(ispaid) AS betaald
FROM (SELECT cust, ispaid FROM orders ORDER BY id DESC LIMIT 10) AS dataset10
GROUP BY cust
HAVING SUM(ispaid) =  0


dat zijn de klanten van de laaste 10 orders, die van die laatste 10 orders nog niets betaald hebben.
of dat een zinvol gegeven is?
dat verandert zodra er een order bij komt.
 
Henk de Vriep

Henk de Vriep

21/10/2014 09:06:09
Quote Anchor link
Bedankt voor je info, uiteraard heeft deze tabel ook een kolom met ordernummer en een kolom met de datum. Gaten in het ID vullen we alleen sowieso niet op die laten we gewoon staan.

Ik zal de query van Ivo later op de dag een keer draaien om te zien of dat het gewenste resultaat heeft.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

21/10/2014 09:19:48
Quote Anchor link
Ik mag er vanuit gaan dat je een aparte tabel customers hebt? Dan kun je met je join al filteren.
 



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.