0

次の 10 日間の誕生日を取得するクエリを作成しています。今日はクエリを作成できましたが、いくつかの投稿を参照した後でも、次の 10 日間は作成できませんでした。これは、今日の誕生日を取得するために作成したクエリです

$count=mysql_query("SELECT u.fname, u.lname, u.profile_pic, u.uid, u.bday, f.uid, 
f.friend_id, f.status FROM friend_list f, users_profile u 
WHERE f.uid = '$id' AND f.status = '1' 
AND u.uid = f.friend_id 
AND DAY(STR_TO_DATE(u.bday, '%m-%d-%y')) = DAY(CURDATE()) 
AND MONTH(STR_TO_DATE(u.bday, '%m-%d-%y')) = MONTH(CURDATE())");

10日間の質問で誰か助けてくれませんか

4

5 に答える 5

2

u.bday が日付の場合、次のようなことができます。

WHERE u.bday < NOW() + INTERVAL 10 DAY AND u.bday >= NOW() 

MySQL には優れた日付比較機能と計算機能があります。詳細については、マニュアルを参照してください: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

u.bday が mm-dd-yyyy 形式の varchar の場合は、次を使用します。

WHERE STR_TO_DATE(u.bday, '%m-%d-%Y') < NOW() + INTERVAL 10 DAY 
                              AND STR_TO_DATE(u.bday, '%m-%d-%Y') >= NOW() 

(u.bday が日付でない場合は、日付にします。列に適切なデータ型を使用すると、作業がずっと楽になります。)

于 2012-09-01T08:10:19.807 に答える
0

グッド プラクティス: データに一致する正しいフィールド タイプを常に使用し、正当な理由がない限り、日付には unix_timestamp を使用しないでください。結合も指定します。

bday がタイムスタンプまたは日付フィールドでない場合 (タイムスタンプ bdays don't change よりも日付型を使用する必要があります)、次のように記述します。

SELECT u.fname, u.lname, u.profile_pic, u.uid, u.bday, f.uid, f.friend_id, f.status<br> 
FROM friend_list f <br>
    join users_profile u on(<br>
    u.uid = f.friend_id  AND f.status = '1' AND STR_TO_DATE(u.bday, '%Y-%m-%d') between date(now()) AND date(DATE_ADD(NOW(), INTERVAL 10 DAY))<br>
    )<br>
where f.uid = '$id'

And if you did use a date type for the field you can change <br>
STR_TO_DATE(u.bday, '%Y-%m-%d')<br>
to<br>
date(u.bday)
于 2013-08-07T15:45:11.420 に答える
0

カレンダー表が必要です。

この最近の投稿を参照してください。

MYSQL を使用して結果からレポートを取得する

または私が参照する元の投稿。

Mysql: 2 つの日付の間のすべてのデータを選択する

于 2012-09-01T08:10:02.823 に答える
0

長い間、私はこれに対する解決策を見つけ、誰かを助けることができるようにそれをみんなと共有しました.

"SELECT u.fname, u.lname, u.profile_pic, u.uid, u.bday, f.uid, f.friend_id, f.status FROM friend_list f, users_profile u WHERE f.uid = '$id' AND f .status = '1' AND u.uid = f.friend_id and DAY(STR_TO_DATE(u.bday, '%m-%d-%y')) < DAY(CURDATE())+7 and DAY(STR_TO_DATE(u .bday, '%m-%d-%y')) != DAY(CURDATE()) AND MONTH(STR_TO_DATE(u.bday, '%m-%d-%y')) = MONTH(CURDATE() )"

于 2012-09-01T11:20:31.613 に答える