Hulp gevraagd bij uitbreiding query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

George van Baasbank

George van Baasbank

05/10/2013 12:28:46
Quote Anchor link
Hallo allemaal,

In bijgaande query toon ik de aankopen van een klant. Nu krijg ik per regel ook het genre van de aankoop mee. Hoe kan ik deze query nu verder optimaliseren om het aantal per gekocht genre te laten zien. Juist dit aantal heb ik nodig om de klant beter te kunnen "bedienen" als hij/zij de shop binnenkomt.

Even een korte uitleg:
shop__klanten bevat de naw-gegevens van de klant
kt_genre is een koppeltabel die de tabellen shop__genre en shop__bestellingen aan elkaar linkt
shop__bestellingen is de tabel waar alle gekochte producten, per klant, staan opgeslagen
shop__genre is de tabel waarin de genres van de producten staan opgeslagen

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
select
   k.voorletters,
   k.tussenvoeg,
   k.achternaam,
   k.klantnummer,
   b.artikelnummer,
   g.genre
from
   shop__klanten as k
join
   shop__bestellingen as b
on
   b.klantnummer = k.klantnummer
join
   kt__genre as kt
on
   b.artikelnummer = kt.a_id
join
   shop__genre as g
on
   g.g_id = kt.g_id
where
    k.wismarkering = 0 and b.klantnummer = '10408'  // Deze laatste waarde wordt aangepast naar gelang de selectie van de klant
order by
    k.klantnummer
?>


Wie heeft voor mij een suggestie?


George
 
PHP hulp

PHP hulp

17/11/2024 11:27:28
 
Ward van der Put
Moderator

Ward van der Put

05/10/2013 12:36:50
Quote Anchor link
Als je de data van één klant hebt, kan ORDER BY k.klantnummer weg.

Wil je het aantal gekochte artikelen per genre tellen met COUNT(*), bedoel je dat? Dan zou ik dat beslist eens heroverwegen, want er zijn slimmere algoritmen te verzinnen voor een webwinkel.
 
George van Baasbank

George van Baasbank

05/10/2013 12:56:03
Quote Anchor link
Ward,

Dat van ORDER klopt. Ik heb in eerste instantie de query gemaakt om een totaalbeeld te krijgen.

Het tellen van het aantal artikelen per genre wilde ik inderdaad met een COUNT doen. Heb jij een beter alternatief?
 
Ward van der Put
Moderator

Ward van der Put

05/10/2013 13:01:32
Quote Anchor link
Als je meer wilt verkopen, zijn er verschillende alternatieven voor tellen per genre.

Kun je ongeveer het soort artikelen noemen?
 
George van Baasbank

George van Baasbank

05/10/2013 13:23:06
Quote Anchor link
Ik heb nu de volgende code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
select
   k.voorletters,
   k.tussenvoeg,
   k.achternaam,
   k.klantnummer,
   b.artikelnummer,
   g.genre,
   COUNT(IF(g.genre = 'Koor', 'Ja', NULL)) AS koor,
   COUNT(IF(g.genre = 'Klassiek', 'Ja',NULL)) AS klassiek
from
   shop__klanten as k
join
   shop__bestellingen as b
on
   b.klantnummer = k.klantnummer
join
   kt__genre as kt
on
   b.artikelnummer = kt.a_id
join
   shop__genre as g
on
   g.g_id = kt.g_id
where
    k.wismarkering = 0 and b.klantnummer = '10408'


Het gaat hier om de site www.jqz.nl die voornamelijk klassiek en religieus verkoopt.
De genres zijn dan ook:
Orgel, koor, gospel, instrumentaal, passie, kerst, klassiek en prmium
 
Ward van der Put
Moderator

Ward van der Put

05/10/2013 13:30:54
Quote Anchor link
Er zijn verschillende varianten denkbaar waarmee je, waarschijnlijk, meer gaat verkopen. Tellen is me te makkelijk, dat kan veel slimmer.

Begin bijvoorbeeld eens met de herkenbare: "Anderen die x kochten, kochten ook y en z." Kijk dus niet naar het genre, maar naar de bestelde artikelen afzonderlijk en vergelijk die met de bestellingen van kopers die hetzelfde artikel bestelden.

Zo creëer je als het ware verschillende gebruikersprofielen van mensen met een vergelijkbare smaak.
 
George van Baasbank

George van Baasbank

05/10/2013 13:55:35
Quote Anchor link
Ja, ja,
Wat anderen kochten staat al op de startpagina

Wat ik precies wil is het volgende:
De startpagina toont een drietal cd's uit de catalogus. Dit gebeurt ad-random. Dus elke keer een andere aanbeveling. Nu wil ik die query laten leiden door de koopsmaak van de bezoeker op basis van het ip-adres.
Dus als een klant "veel" koorzang koopt, wil ik die klant dan ook koorzang onder de aandacht brengen.
 
Ward van der Put
Moderator

Ward van der Put

05/10/2013 14:25:02
Quote Anchor link
Dan heb je een heel andere query nodig. Waarom begin je met SELECT k.voorletters, k.tussenvoeg, k.achternaam? Je hebt de voorletters van de klant toch niet nodig om weer te geven producten op basis van IP-adres te selecteren?
 
George van Baasbank

George van Baasbank

05/10/2013 14:30:21
Quote Anchor link
In de tabel shop__klanten komt ook het ip-adres voor. De naw zijn dus niet nodig.

Toevoeging op 05/10/2013 16:26:40:

Na wat puzzelen heb ik een, voor mij, goede oplossing:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
select
   g.genre as genre,
   count(b.id) as aantal
from
   shop__klanten as k
join
   shop__bestellingen as b
on
   b.klantnummer = k.klantnummer
join
   kt__genre as kt
on
   b.artikelnummer = kt.a_id
join
   shop__genre as g
on
   g.g_id = kt.g_id
where
    k.wismarkering = 0 and b.klantnummer = '10408'
group by
   g.genre
order by
   aantal desc


Deze query toont de aantallen per genre door een klant gekocht en het genre met de meeste aankopen bovenaan.

In ieder geval bedankt voor het meedenken


George

Topic gesloten
 



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.