Utilisez MySQL pour déterminer si, aujourd'hui, c'est l'anniversaire d'un utilisateur
J'ai tous les anniversaires des utilisateurs stockées en tant que UNIXtimestamp et suis désireux d'envoyer des e-mails chaque jour pour les utilisateurs qui ont un anniversaire ce jour-là.
J'ai besoin de faire une requête MySQL qui vous permettra d'obtenir toutes les lignes qui contiennent un anniversaire sur la date d'aujourd'hui.
Il semble que ce devrait être assez simple, mais peut-être que je suis juste de compliquer à l'excès.
source d'informationauteur James Simpson
Vous devez vous connecter pour publier un commentaire.
Cela devrait fonctionner:
Ici est une réponse qui prend en compte le saut-ans et toujours de vous donner les utilisateurs dont l'anniversaire est le 29 février en même temps que ceux du 1er Mars.
Car cela devient de plus en plus à être un code de golf de la question, voici mon approche sur la résolution de ce y compris en prenant soin de les années bissextiles:
Explication: La première clause where vérifie si quelqu'un l'anniversaire aujourd'hui.
Le second permet de s'assurer de sélectionner uniquement ceux dont l'anniversaire est le 29 Février uniquement si le jour est le dernier jour de février.
Exemples:
Je tombe sur ce problème, et j'ai juste utilisé ce simple code à l'aide de la
NOW();
Les résultats sont aujourd'hui les anniversaires alors, après que je travail dans l'envoi d'emails à mes utilisateurs sur leur anniversaire.
- Je stocker mes utilisateurs bithdays en utilisant simplement la DATE, donc j'ai toujours
yy:mm:dd
de sorte que cela fonctionne comme un charme, au moins pour moi, à l'aide de cette approche.J'ai pris Saggi Malachie réponse et élargie pour inclure un anniversaire le 29 février dans 28 février, date, si cette année il n'y a pas un tel jour.
La réponse ci-dessous ne fonctionne pas réellement. Il ne prend pas en compte le fait qu'une année est 365.24 (leap jours maintenant et puis) jours de temps, de sorte que la comparaison réelle contre les utilisateurs de la date de naissance est compliqué pour dire le moins. Je pars pour des raisons historiques.
Voici ma contribution
Les bits '(dayofyear(date_format(current_date,'%Y-03-01'))-60)' retourne 1, les années bissextiles depuis le 1er mars sera dayofyear numéro 61, et 0 sur les années normales.
De là, c'est juste une question de soustrayant cette journée supplémentaire pour l' "est-il-mon-anniversaire"-calcul.
Vous pouvez utiliser la requête ci-dessous si la date de naissance stockées dans une table.
Anniversaire Aujourd'Hui :
Hier Anniversaire:
Demain Anniversaire:
Profiter 🙂
Cela vous donne une personne d'anniversaire calculé selon l'année en cours.
Ensuite, vous pouvez l'utiliser pour d'autres calculs!
Les colonnes
isBirthday28Feb
etisThisYearLeap
sont donnés pour illustrer simplement la solution.Ce doit couvrir l'année bissextile cas, et utilise la date interne de la mécanique.
Fondamentalement, il fonctionne en ajoutant les ans entre les deux dates, la date de naissance et vérifie l'égalité avec la date en cours:
Test:
Ne pouvais pas vous suffit de sélectionner toutes les lignes qui correspondent à la date du jour? Vous pouvez également utiliser la FROM_UNIXTIME() pour convertir le timestamp unix d'une Date:
mysql> SELECT FROM_UNIXTIME(1196440219);
-> '2007-11-30 10:30:19'
C'est documentée à partir de http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_from-unixtime
Cochez cette URL: http://www.tizag.com/mysqlTutorial/mysql-date.php