Ik ga het proberen zo eenvoudig mogelijk te beschrijven :
Ik ben een tool aan het maken voor een hosting bedrijf en momenteel vraag ik alle domeinen van een klant op waar een forwarding aan hangen.
Nu, de tabellen voorzien geen huidige status van een domein, maar de historiek van een domein is een opeenvolging van bestellingen. Elke bestelling die een klant doet heeft een verwijzing naar de tabel met alle registratie-informatie en naar de tabel met alle hosting/fw-informatie. Een vernieuwing van een domein is een kwestie van de laatste bestelling aan een nieuwe factuur te hangen met een paar extra parameters. De facturen worden op die manier al een tijdje gemaakt en dit werkt probleemloos. Ik kan zelfs foutjes die vroeger in de boekhouding gemaakt zijn of speciale gevallen probleemloos erin krijgen.
In ieder geval, ik wil dus de huidige status van het domein opvragen. Ik begon met te kijken naar alle domeinen van die klant die de juiste status hebben en waarvan de URLFW_ID en de MAILFW_ID niet NULL is. Dit geeft me inderdaad alle forwardings terug, maar ook de forwardings die niet meer actief zijn.
Nu, geen probleem, elk record in de tabel met hosting/fw-info heeft een activatiedatum en bij de koppeling van de bestelling aan de factuur voeg ik een factor toe om aan te tonen de hoeveelste vernieuwing dat is hiervan. Dus ik voegde aan m'n lijst van voorwaarden toe "DATEADD(year, iox.OPTION_FACTOR+1, do.ACTIVATION_DATE) > GETDATE()". Op die manier bekijk ik alleen de huidige hostings/fw dacht ik.
Tot ik gisterenavond de slaap niet kon vatten en er wat over lag na te denken... Als een klant een forwarding heeft besteld verleden week (activatiedatum=29 juli bijv.) en hij upgrade vandaag naar een hosting (activatiedatum=4 aug dus), dan gaat die forwarding nog steeds getoond worden.
Mijn vorige workaround met de DATEADD() was dus geen goede en ik zal terug naar mijn originele idee moeten : van elk domein moet ik de laatste bestelling hebben en daarvan moet ik dan de hosting/fw bekijken.
Een voorbeeld van mijn huidig statement ziet er als volgt uit :
(ik heb het wat ingekort om het leesbaar te houden)
Ik hoop dat mijn uitleg een beetje te begrijpen en volledig is. Het ziet er misschien wat chaos-achtig uit, maar als je de complexiteit bekijkt is dat ook wel nodig. Over de database structuur heb ik goed nagedacht en ik ben er vrij tot heel tevreden over. Ik kan er alles mee wat ik wil. Dit moet ook lukken, ben ik vrij zeker van, het lukt me alleen momenteel niet in 1 statement...
Alvast bedankt!
Ik ben een tool aan het maken voor een hosting bedrijf en momenteel vraag ik alle domeinen van een klant op waar een forwarding aan hangen.
Nu, de tabellen voorzien geen huidige status van een domein, maar de historiek van een domein is een opeenvolging van bestellingen. Elke bestelling die een klant doet heeft een verwijzing naar de tabel met alle registratie-informatie en naar de tabel met alle hosting/fw-informatie. Een vernieuwing van een domein is een kwestie van de laatste bestelling aan een nieuwe factuur te hangen met een paar extra parameters. De facturen worden op die manier al een tijdje gemaakt en dit werkt probleemloos. Ik kan zelfs foutjes die vroeger in de boekhouding gemaakt zijn of speciale gevallen probleemloos erin krijgen.
In ieder geval, ik wil dus de huidige status van het domein opvragen. Ik begon met te kijken naar alle domeinen van die klant die de juiste status hebben en waarvan de URLFW_ID en de MAILFW_ID niet NULL is. Dit geeft me inderdaad alle forwardings terug, maar ook de forwardings die niet meer actief zijn.
Nu, geen probleem, elk record in de tabel met hosting/fw-info heeft een activatiedatum en bij de koppeling van de bestelling aan de factuur voeg ik een factor toe om aan te tonen de hoeveelste vernieuwing dat is hiervan. Dus ik voegde aan m'n lijst van voorwaarden toe "DATEADD(year, iox.OPTION_FACTOR+1, do.ACTIVATION_DATE) > GETDATE()". Op die manier bekijk ik alleen de huidige hostings/fw dacht ik.
Tot ik gisterenavond de slaap niet kon vatten en er wat over lag na te denken... Als een klant een forwarding heeft besteld verleden week (activatiedatum=29 juli bijv.) en hij upgrade vandaag naar een hosting (activatiedatum=4 aug dus), dan gaat die forwarding nog steeds getoond worden.
Mijn vorige workaround met de DATEADD() was dus geen goede en ik zal terug naar mijn originele idee moeten : van elk domein moet ik de laatste bestelling hebben en daarvan moet ik dan de hosting/fw bekijken.
Een voorbeeld van mijn huidig statement ziet er als volgt uit :
(ik heb het wat ingekort om het leesbaar te houden)
code:
1
2
3
4
5
6
7
8
9
| SELECT d.ID, do.ID OPTION_ID FROM INVOICES i INNER JOIN INVOICES_ORDERS_X iox ON i.ID = iox.INVOICE_ID INNER JOIN ORDERS o ON iox.ORDER_ID = o.ID INNER JOIN DOMAIN_OPTIONS do ON o.DOMAIN_OPTION_ID = do.ID INNER JOIN DOMAINS d ON o.DOMAIN_ID = d.ID WHERE i.BILLING_ID = 302 AND (do.URLFW_ID IS NOT NULL OR do.MAILFW_ID IS NOT NULL) AND d.STATUS_ID = 3 |
Ik hoop dat mijn uitleg een beetje te begrijpen en volledig is. Het ziet er misschien wat chaos-achtig uit, maar als je de complexiteit bekijkt is dat ook wel nodig. Over de database structuur heb ik goed nagedacht en ik ben er vrij tot heel tevreden over. Ik kan er alles mee wat ik wil. Dit moet ook lukken, ben ik vrij zeker van, het lukt me alleen momenteel niet in 1 statement...
Alvast bedankt!