Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia,
qual é a melhor forma de armazenar as datas comemorativas no mysql sendo que elas deverão ser exibidas todo ano em sua proximidade.
A tabela está assim:
>
CREATE TABLE IF NOT EXISTS `datas_comemorativas` (
`id` int(3) NOT NULL AUTO_INCREMENT,
`data` date NOT NULL,
`ocasiao` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM
2011-07-20
Dia do Amigo
Este não não está exibindo.
Minha select
SELECT data,ocasiao FROM datas_comemorativas WHERE data BETWEEN DATE_SUB( DATE_FORMAT(CURDATE(),'%m-%d') , INTERVAL 1 DAY ) AND DATE_ADD( DATE_FORMAT(CURDATE(),'%m-%d') , INTERVAL 15 DAY) ORDER BY data ASC
agradeço
esse tipo de consulta nao ira dar certo pois no momento em que o ano virar você tera um problema
1230 (30 de dezembro) é maior que 115 (15 de janeiro) logo deveria vir invertido no between (no between o menor vem sempre antes do maior, senao nao funciona direito), mas se for invertido os valores no between você vai pegar o ano todo, de janeiro até dezembro...
sendo assim, você precisa sempre cadastrar todas as datas para todos os anos , o que é o correto ,pois tem uma penca de feriado móvel.
1 - No teste que eu fiz tive que deixar o DATE_FORMAT para fora do SUBDATE pois estava retornando NULL outra coisa foi aplicar o DATE_FORMAT a data para que funcionasse o BETWEEN.
Da seguinte forma funcionou:
SELECT data,ocasiao FROM datas_comemorativas
WHERE DATE_FORMAT(data,'%m-%d') BETWEEN
DATE_FORMAT(SUBDATE( NOW() , INTERVAL 1 DAY ),'%m-%d') AND
DATE_FORMAT(ADDDATE( NOW() , INTERVAL 15 DAY),'%m-%d') ORDER BY data ASC