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 是 varchar 格式的 mm-dd-yyyy,请使用:

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

努力了这么久,我找到了解决方案,与大家分享,以便它可以帮助某人。

“选择 u.fname, u.lname, u.profile_pic, u.uid, u.bday, f.uid, f.friend_id, f.status FROMfriend_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 回答
0

您将需要一个日历表。

看到这个最近的帖子;

使用 MYSQL 从结果中获取报告

或我所指的原始帖子;

Mysql:选择两个日期之间的所有数据

于 2012-09-01T08:10:02.823 回答
0

良好做法:始终使用与数据匹配的正确字段类型,并避免使用 unix_timestamp 作为日期,除非您有充分的理由。还要指定您的联接。

如果您的 bday 不是时间戳或日期字段(应该使用日期类型而不是时间戳 bdays 不要更改),则将其写为:

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
SELECT * FROM tablename WHERE DAYOFYEAR(curdate()) <= DAYOFYEAR(fieldname) AND DAYOFYEAR(curdate()) +10 >= DAYOFYEAR(fieldname) LIMIT 30;
于 2016-06-04T06:01:51.330 回答