2

生年月日が MySQL で「Date」型として保存されている場合、PHP で特定のユーザーの今日の誕生日かどうかをどのように判断しますか?

単純に、生年月日列の値を取得し、で爆発させてから-、日と月が PHP の現在の日と月と一致するかどうかを確認するだけでよいのでしょうか? それとも、それを行うためのより単純で粗雑でない方法はありますか?

また、今日が誕生日SELECT のすべてのユーザーに対して、どのクエリを使用しますか?

4

7 に答える 7

16

年を除外する必要があるため、次のようにMONTHおよびDAYSQL関数を使用できます。

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!
于 2012-06-04T22:22:52.040 に答える
2

MySQLの日付関数を使用して、ユーザーの生年月日から月日を抽出し、現在の日付から抽出された同じ値と比較します。

SELECT * FROM table WHERE
    DAY(birthday) = DAY(CURDATE()) AND
    MONTH(birthday) = MONTH(CURDATE());

これにより、年に関係なく、重要な値(月と日)が一致するようになります。お役に立てば幸いです。

DAYOFYEARPS:あなたはもっと単純なバージョンとして使いたくなるかもしれません。しないでください。うるう年はあなたを台無しにするでしょう。

編集:特に大きなテーブルでは、where句で日付関数を使用すると速度が大幅に低下するようです。詳細については、以下の私の最後のコメントを参照してください。

于 2012-06-04T22:25:02.813 に答える
1

誕生日が現在の日付と同じ月日である人を検索します。

SELECT * from people 
WHERE month(birthDate) = month(curdate()) 
AND dayofmonth(birthDate) = dayofmonth(curdate())
于 2012-06-04T22:26:21.347 に答える
1

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

他の回答は、誕生日が今日であるユーザーを取得するためのクエリを示しています

于 2012-06-04T22:21:40.117 に答える
0
select * from table
where month(BirthDate) = month(curdate())
and day(BirthDate) = day(curdate());
于 2012-06-04T22:25:55.933 に答える
0
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' ";
于 2016-08-02T10:55:48.673 に答える