06. juni 2003 - 02:13Der er
9 kommentarer og 1 løsning
Fødselsdagsstyring vha. sindring forespørgsel.
Hej eksperter
Jeg har en tabel med følgende struktur:
CREATE TABLE people ( id smallint(5) unsigned NOT NULL auto_increment, birthdate date NOT NULL default '0000-00-00', firstname varchar(255) NOT NULL default '', lastname varchar(255) NOT NULL default '', PRIMARY KEY (id) ) TYPE=MyISAM;
Dvs. en tabel med navne og fødselsdatoer
Jeg har desuden følgende forespørgsel, som finder fornavn, efternavn, antal dage til næste fødselsdag samt alder målt i år ved næste fødselsdag:
SELECT firstname, lastname, IF ( MONTH (birthdate) > MONTH (CURDATE()) OR MONTH (birthdate) >=MONTH (CURDATE()) AND DAYOFMONTH(birthdate) >= DAYOFMONTH(CURDATE()), TO_DAYS(CONCAT(YEAR(CURDATE()), DATE_FORMAT(birthdate, '%m%d'))) - TO_DAYS(CURDATE()), TO_DAYS(CONCAT(YEAR(CURDATE())+1, DATE_FORMAT(birthdate, '%m%d'))) - TO_DAYS(CURDATE())) AS daysuntilbirthday,
birthdate FROM people ORDER BY daysuntilbirthday ASC LIMIT 0, 30
Mit spørgsmål er så om dette ikke kan gøres nemmere og hurtigere - den forespørgsel jeg har bygget op ovenfor er lidt tung i røven og må kunne optimeres en del?
Har kun lige SQL Server dok. i nærheden, men her er deres eksempel: SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days FROM titles
hvor pubdate er en kolonne i titles, og getdate() er 'nu'=curdate(). 'day' siger til datediff at du vil have dage, du kan også få sekunder, uger etc. F.eks. alder målt i år ville så være datediff(year, birthdate, curdate())
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.