05. august 2008 - 11:08Der er
15 kommentarer og 1 løsning
X dage tilbage
Jeg har en VIP-funktion på en hjemmeside, som jeg er ved at omskrive.
Den nye mysql-struktur er:
brugernavn (varchar) | dato for VIP start (varchar) | dage tilbage af VIP-periode (varchar)
En typisk indtastning kunne være: supermand, 05/08/2008, 365 (Et års VIP - 365 dage)
Nu mangler jeg bare et script der automatisk kan trække -1 fra alle "dage tilbage af vip-periode" én gang dagligt, så tabellen på den måde kan holde sig opdateret.
Jeg har forsøgt at lege med nogle timestamps o.s.v., men det lykkedes mig ikke at komme frem til noget brugbart. Er der nogle der har et par tips?
Alene det at du har valgt varchar til noget der er et tal er et godt signal om at du er ved at lave noget hø (valget til dit datofelt er heller ikke for god, men varchar til tal er helt skidt)).
Du bør lave din struktur om:
bruger | startdato (date) | slutdato (date)
Hvis du har en numerisk ID-kolonne i din brugertabel bør du bruge den i stedet for brugernavn for at spare på pladsforbruget. Din primærnøgle i tabellen bør være bruger, startdato (startdato kan udelades hvis du sletter eller opdaterer rækken når man fornyer VIP'en)
For at finde ud af hvor mange dage der er tilbage kan du bruge DATEDIFF(slutdato,startdato). Det gør også at du kan bruge WHERE CURDATE() BETWEEN startdato AND slutdato for at se om der er VIP aktiv for den pågældende bruger (selvfølgelig med tilføjelse af en betingelse på brugernavnet).
Du skal som sagt bruge date som dine kolonnetyper. På den måde behøver du heller ikke beregne noget i din PHP-kode, men kan skrive det direkte ind som en fast del af din SQL: brug CURDATE() for i dag, og DATE_ADD(CURDATE(), INTERVAL 365 DAY) for at få 365 dage senere. (evt. INTERVAL 1 YEAR hvis det skal være et helt år når der er skudår).
DATEDIFF skal ganske rigtigt skrives ind som en SELECT-kolonne hvor du vil finde ud af hvor mange dage der er tilbage (og du skal nok bruge AS for at kunne pege på den med et lidt mere sigende navn). Du kan også hive de to felter ud i PHP og arbejde med det der, men som jakob siger kræver det noget mere arbejde.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.