Query
Ik ben bezig met een scriptje wat een rapportje moet kunnen maken met data die uit een database komt. de basis lukt me allemaal redelijk maar ik kom ergens niet uit en ik dacht nou misschien kan hier iemand mij opweg helpen.
Ik heb een database met daarin wat verkopen aan die verkopen zit een uniek klant nummer vast. Nu wil ik kijken op een bepaalde dag of dat unieke klant nummer max dagen voor tot max 2 dagen na die bepaalde dag ook nog aankopen heeft gedaan.
Is dit mogelijk in 1 query of moet ik er hier echt 2 voor gebruiken?
Alvast bedankt voor de input.
Dit is iets dat (zonder de database te zien) zeker in 1 query moet kunnen!
Gr. Robert
ik doe het nu zo
de database ziet er zo (voorbeeld)
KlantID - Datum - totaal - btw
ik haal alle unieke klant id's op van een bepaalde datum.
en in een while lus kijk ik met een andere query of dat klantid op een van de omringede datum's voor komt.
komt die voor dan tel ik 1 op bij een var.
Maar volgens mij kan dit sneller en makkelijker.
Toevoeging op 03/04/2013 20:15:54:
@BAS het staat allemaal in 1 table dus ik hoef niks te joinen of iets.
Gewijzigd op 03/04/2013 20:21:42 door Patrick de heer
Alles alles in 1 tabel staat heb je NOOIT meerdere query's nodig!
Tenzij je 2 verschillende overzichten wilt ophalen.
Gr. Robert
Maar iemand een idee naar welk statement ik dan zou moeten kijken om het 1 een query te doen.
Ik begrijp nog even niet helemaal wat je uiteindelijke doel is, wat je data is en wat je nu precies niet lukt?
Kun je dit misschien iets beter beschrijven?
Gr. Robert
Uniek klant_id met (meerdere) verkopen?
Dus dat betekend dat je elke keer weer alle gegevens toevoegt? Is het niet veel handiger om daar in elk geval 2 tabellen van te maken (is een voorbeeld zou je verder kunnen uitwerken):
Klant_id
naam
adres
etc...
aankoop_id
artikel
aantal
datum_verkoop
Edit:
Zou je anders hier een stukje van je database tabel kunnen laten zien en welke query je tot nu toe hebt.
Zou je anders hier een stukje van je database tabel kunnen laten zien en welke query je tot nu toe hebt.
Gewijzigd op 03/04/2013 20:31:49 door Bas IJzelendoorn
ID - KlantID - Datum - Bedrag - BTW
Stel ik maak een lijst met alle KlantID's van Datum 27-03-2013
En nu wil ik dat ik voor elk van die KlantID's die er voor de 27-03-2013 is staan gekeken word of die KlantID's ook voorkomen met datum 25-03-2013, 26-03-2013, 28-03-2013 en 29-03-2013.
Komt het klantID op een van die datums voor dan moet een variabele met 1 opgehoogd worden (ook al komt hij op alle 4 de datums voor) en komt de KlantID niet voor op die datums moet hij een andere variablen met 1 ophogen.
Ik hoop dat het zo wat duidelijker is.
@Het gaat er nu niet zo zeer om of de database goed is of niet. Het gaat mee meer om te kijken hoe ik zo effectief mogelijk een query kan bouwen voor deze situatie.
Gewijzigd op 03/04/2013 20:39:08 door Patrick de heer
Begin dan eerst is met een 1e query opset maken!
Dan kunnen we hier vast wel kijken of dit efficienter kan of niet.
Gr. Robert
eerst achterhaal ik het totaal aantal verkopen met een klantID voor die dag met de volgende query
SELECT count(*) FROM SELL WHERE DATE_FORMAT( `Datum` , '%Y-%m-%d' ) = '2013-03-27' AND `KlantID` !=0
Daarna de volgende query die filterd alle klanten er uit die 2 of meer keer op die dag iets besteld hebben.
SELECT count(*),KlantID FROM SELL WHERE DATE_FORMAT(`Datum` , '%Y-%m-%d' ) = '2013-03-27' AND KlantID !=0 GROUP BY KlantID HAVING count(*) = 1
en al de resultaten die over blijven controleer ik of ze in die omliggende data voor komen doormiddel van een WHILE en de volgende query
select ID from SELL WHERE KlantID = ".$row['KlantID']." AND DATE_FORMAT( `Datum` , '%Y-%m-%d' ) IN ('2013-03-25','2013-03-26','2013-03-28','2013-03-29')
Als ik resultaat heb wat groter is dan 0 verhoog ik de variable SellMore met 1 Heb ik geen resultaat dan verhoog ik de SingleSell met 1
Niemand een aanvulling?
Dus niemand heeft hier feedback op?