Opvragen hoevaak een klant iets gekocht heeft via SQL

Status
Niet open voor verdere reacties.

MaxExcel

Gebruiker
Lid geworden
5 feb 2008
Berichten
49
Situatie:
Ik wil weten hoeveel terugkerende klanten ik heb in mijn webwinkel, alle bestellingen worden opgeslagen in mijn SQL database.
Nu ben ik benieuwd hoe vaak klanten terugkeren zodat ik kan berekenen wat een klant in een jaar opbrengt, volgens mij kan dit met een SQL select/command maar ik weet niet goed hoe, ik denk dat het makkelijkste is om te tellen hoe vaak een IP adres dubbel voorkomt, het klopt dan wel niet helemaal (als de klant een nieuw IP adres heeft gekregen telt hij als nieuwe klant) maar dan heb ik wel een globaal idee.

database naam: database_shop
tabel naam: database_payments
tabel veld naam: ip

Kan iemand me hiermee helpen?
 
Zoals jij het nu zegt wordt het ongeveer dit:

[sql]
SELECT COUNT(ip) FROM database_payments GROUP BY ip
[/sql]

Dan krijg je het aantal keren dat een IP iets gekocht heeft. Als je je klanten zich niet laat registreren is het ongeveer de beste manier om het te doen, misschien dat hoogstens rekening nog beter is, mits je vooral iDeal en PayPal enzo ondersteunt en niet telefoon / wallie kaarten / etc.

Als je nog een veld hebt waar het aankoopbedrag in staat kun je na COUNT(ip) nog een komma doen en dan SUM( veld_met_bedrag ) zetten om het totaal bedrag te zien.
 
Bedankt Frats!

Hiermee krijg ik inderdaad een lijstje te zien met het aantal keren dat iemand op basis van ip gekocht heeft, ik vraag me echter af of het ook mogelijk is om een klein lijstje te krijgen waarin te zien is hoeveel mensen er 1x, 2x, 3x enz. gekocht hebben want als ik nu alles probeer te selecteren met CTRL+A, CTRL+C loopt mijn pc vast :P

Is het mogelijk om een lijstje te krijg zoals dit:

Aantal keer dat iemand iets gekocht heeft | Totaal aantal mensen dat die hoeveel heeft gekocht
1 | 121
2 | 110
3 | 90
 
Hm das iets lastiger... probeer dit eens?

[sql]
SELECT COUNT(num_times)
FROM (
SELECT COUNT(ip) as num_times FROM database_payments GROUP BY ip
)
GROUP BY num_times
[/sql]

Weet niet of het werkt hoor, en ik heb hier zo geen test omgeving om het op te proberen. Als het niet werkt, geef dan even de foutmelding of het resultaat, afhankelijk van wat je krijgt ;)
 
Ik krijg deze foutmelding:
#1248 - Every derived table must have its own alias
 
Oeps.

[sql]
SELECT COUNT(num_times)
FROM (
SELECT COUNT(ip) AS num_times FROM database_payments GROUP BY ip
) AS payment_by_num_times
GROUP BY num_times
[/sql]

En op deze manier?
 
Geen error maar ik kan ook niet zien hoevaak het precies voorkomt, kan wel een voorstelling maken, bovenste nummer is 1 dan 2 dan 3 alleen zie ik het niet als er een nummer overgeslagen wordt, is het mogelijk om er een tweede rij bij te krijgen waar dat nummer komt te staan?

Code:
COUNT(num_times)
32175
9430
3868
1977
1034
675
408
275
176
142
98
94
65
42
39
29
31
17
13
11
10
5
7
5
9
4
3
6
2
1
3
2
1
1
3
3
2
 
[sql]SELECT COUNT(num_times), num_times
FROM (
SELECT COUNT(ip) AS num_times FROM database_payments GROUP BY ip
) AS payment_by_num_times
GROUP BY num_times[/sql]

Zou gewoon moeten werken :P
 
Zoals jij het nu zegt wordt het ongeveer dit:

[sql]
SELECT COUNT(ip) FROM database_payments GROUP BY ip
[/sql]

Dan krijg je het aantal keren dat een IP iets gekocht heeft. Als je je klanten zich niet laat registreren is het ongeveer de beste manier om het te doen, misschien dat hoogstens rekening nog beter is, mits je vooral iDeal en PayPal enzo ondersteunt en niet telefoon / wallie kaarten / etc.

Als je nog een veld hebt waar het aankoopbedrag in staat kun je na COUNT(ip) nog een komma doen en dan SUM( veld_met_bedrag ) zetten om het totaal bedrag te zien.
dit moet je toch in een code gieten voor php
ik krijg alleen errors
 
Dit is SQL... als je SQL in PHP wil gebruiken moet je idd nog een paar extra stappen doen maar die had de oorspronkelijke poster zelf al gedaan.

Je kunt gebruiken maken van mysql_query om een query te doen:

PHP:
$resource = mysql_query( "SELECT * FROM tabel" );

En dan een loop om de data binnen te halen:

PHP:
while ( $rij = mysql_fetch_array( $resource ) ) {
echo 'nieuwe rij: <br />';
print_r ( $rij );
}

Ik ga er hierbij wel vanuit dat je al een verbinding gemaakt hebt met de database.
Als je een specifiekere vraag hebt hoor ik het graag ;)
 
Dit is SQL... als je SQL in PHP wil gebruiken moet je idd nog een paar extra stappen doen maar die had de oorspronkelijke poster zelf al gedaan.

Je kunt gebruiken maken van mysql_query om een query te doen:

PHP:
$resource = mysql_query( "SELECT * FROM tabel" );

En dan een loop om de data binnen te halen:

PHP:
while ( $rij = mysql_fetch_array( $resource ) ) {
echo 'nieuwe rij: <br />';
print_r ( $rij );
}

Ik ga er hierbij wel vanuit dat je al een verbinding gemaakt hebt met de database.
Als je een specifiekere vraag hebt hoor ik het graag ;)

ik heb het wel aan gepas , maar hij telt niet goed vind ik.
dit is mijn tabel waar ik uit werk
teller;datum;tijd;site;aantal;een;ip;scherm;taal;browser;os
64;3-6-2011;7:20:25;site4;1;1;111.112.113.114;1280 X 1024;nl;Internet Explorer 8;Windows XP
65;3-6-2011;7:21:39;site4;2;1;111.112.113.114;1280 X 1024;nl;Internet Explorer 8;Windows XP
66;3-6-2011;7:30:02;site4;3;1;111.112.113.114;1280 X 1024;nl;Internet Explorer 8;Windows XP
67;3-6-2011;7:30:27;site4;4;1;111.112.113.114;1024 X 768;nl;Internet Explorer 7.0;Windows Vista
73;3-6-2011;8:20:54;site4;5;1;111.112.113.114;1024 X 738;en-us;Mozilla Firefox 3.6.16;linux
74;3-6-2011;8:29:27;site4;6;1;111.112.113.114;1280 X 1024;nl;Internet Explorer 8;Windows XP
ik zou graag kunnen zien hoe vaak welke browser word gebruikt.
als ik er maar 1 goed zou hebben denk dat ik er daar na wel verder weer uit kom.
 
Laatst bewerkt:
Als je wilt meten hoe vaak elke browser gebruikt wordt kun je COUNT en GROUP BY gebruiken in je query:

[sql]
SELECT browser, COUNT(browser)
FROM tabel
GROUP BY browser
[/sql]
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan