生年月日が MySQL で「Date」型として保存されている場合、PHP で特定のユーザーの今日の誕生日かどうかをどのように判断しますか?
単純に、生年月日列の値を取得し、で爆発させてから-
、日と月が PHP の現在の日と月と一致するかどうかを確認するだけでよいのでしょうか? それとも、それを行うためのより単純で粗雑でない方法はありますか?
また、今日が誕生日SELECT
のすべてのユーザーに対して、どのクエリを使用しますか?
年を除外する必要があるため、次のようにMONTH
およびDAY
SQL関数を使用できます。
SELECT * FROM table WHERE MONTH(birthday) = MONTH(NOW()) AND DAY(birthday) = DAY(NOW());
この列にインデックスを追加することを忘れないでください。そうしないと、データが大きくなるにつれてパフォーマンスが大幅に低下します。
PHPでは、 date関数を使用できます。
if (date('m-d', strtotime($row['date'])) == date('m-d'))
//-- Today is my birthday! Hooray!
MySQLの日付関数を使用して、ユーザーの生年月日から月日を抽出し、現在の日付から抽出された同じ値と比較します。
SELECT * FROM table WHERE
DAY(birthday) = DAY(CURDATE()) AND
MONTH(birthday) = MONTH(CURDATE());
これにより、年に関係なく、重要な値(月と日)が一致するようになります。お役に立てば幸いです。
DAYOFYEAR
PS:あなたはもっと単純なバージョンとして使いたくなるかもしれません。しないでください。うるう年はあなたを台無しにするでしょう。
編集:特に大きなテーブルでは、where句で日付関数を使用すると速度が大幅に低下するようです。詳細については、以下の私の最後のコメントを参照してください。
誕生日が現在の日付と同じ月日である人を検索します。
SELECT * from people
WHERE month(birthDate) = month(curdate())
AND dayofmonth(birthDate) = dayofmonth(curdate())
1
クエリに追加して、今日が誕生日の場合の値を含めることもできます。これにより簡単になり、PHPで比較を行う必要がなくなります。
SELECT
user_table.*,
(MONTH(user_table.birth_date_column) = MONTH(now())
AND DAY(user_table.birth_date_column) = DAY(now())) as birthday_today
FROM user_table
他の回答は、誕生日が今日であるユーザーを取得するためのクエリを示しています
select * from table
where month(BirthDate) = month(curdate())
and day(BirthDate) = day(curdate());
For Get User list whose birthday is today in mysql field datatype must be date
$Toaday = '%'.date('m-d').'%';
$query = " select client_id,name,mobile_no from client where is_visible = 1 AND birth_date LIKE '$Toaday' ";