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?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.