Hallo, ich möchte ausgeben, welche geburstage in den kommenden 100 tagen gefeiert werden und zwar nur mit SQL, es gibt dafür verschiedene ansätze, habe auch schon welche gefunden, aber ich wollte einen eigenen. Wahrscheinlich habe ich einen kleinen Denkfehler.
Meine Tabelle sieht so aus
"0000000001";"peter";"1981-02-25"
"0000000002";"julian";"1983-04-30"
"0000000003";"martin";"1985-06-13"
"0000000004";"julian";"1987-08-17"
"0000000005";"karl";"1989-10-25"
"0000000006";"manfred";"1991-12-30"
"0000000007";"waltern";"1993-02-25"
"0000000008";"tim";"1995-04-30"
"0000000009";"stephan";"1997-06-25"
"0000000010";"wilhelm";"1999-08-30"
also ID, username und geburtsdatum
Das blöde ist jetzt, dass die User nicht in ein und dem selben jahr geburtstag haben, sonst wäre das ganze wohl etwas leichter. Mein Idee ist nun folgene, ich formatiere, das Datum immer so, dass das jahr außer acht gelassen wird
DATE_FORMAT( geb_dat, '%m%d' )
dann vergleiche ich dieses Datum mit dem Datum von heute und dem von heute +20 Tagen. Alle User die in diesem Intervall Geburtstag haben, sollen ausgegeben werden.
Mein query gibt allerdings 0 Datensätze aus
SELECT name, geb_dat, DATE_FORMAT( geb_dat, '%m%d' )
FROM tab_user
WHERE DATE_FORMAT(geb_dat,'%m%d')
BETWEEN DATE_FORMAT(curdate(),'%m%d')
AND date_add(DATE_FORMAT(curdate(),'%m%d'),INTERVAL 200 DAY)
habe ich jetzt einen Denkfehler?
Hier noch der Code zum erzeugen der Tabellen
CREATE TABLE `tab_user` (
`id` int(10) unsigned zerofill NOT NULL auto_increment,
`name` varchar(30) collate latin1_general_ci NOT NULL,
`geb_dat` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=12 ;
--
-- Daten für Tabelle `tab_user`
--
INSERT INTO `tab_user` (`id`, `name`, `geb_dat`) VALUES
(0000000001, 'peter', '1981-02-25'),
(0000000002, 'julian', '1983-04-30'),
(0000000003, 'martin', '1985-06-13'),
(0000000004, 'julian', '1987-08-17'),
(0000000005, 'karl', '1989-10-25'),
(0000000006, 'manfred', '1991-12-30'),
(0000000007, 'waltern', '1993-02-25'),
(0000000008, 'tim', '1995-04-30'),
(0000000009, 'stephan', '1997-06-25'),
(0000000010, 'wilhelm', '1999-08-30');