我用的PHP+MYSQL,我想实现通过SQL语句找到近天的信息,并把这些信息按点击排序.而原来只有排序功能
发布网友
发布时间:2022-04-14 01:28
我来回答
共3个回答
热心网友
时间:2022-04-14 02:57
你的begintime字段不是一个date类型的字段吧,它存的是一个毫秒数。
to_days并不能把一个毫秒时间转换为日期类型。。MYSQL并没有提供处理毫秒时间的函数,所以你的处理需要在PHP中进行。
比如可以这样子:
$now = microtime(true);
$three_days_before = $now - 60*60*24*3600; //三天前
$sql = "SELECT * FROM `{$db_dbname}information` WHERE a = 1 AND begintime>=".$three_days_before." ORDER BY hit DESC,begintime DESC LIMIT 0,".$num;
热心网友
时间:2022-04-14 04:15
我后面是这么写的:to_days(from_unixtime(begintime)) >= (to_days(DATE_ADD( UTC_TIMESTAMP( ) , INTERVAL 8 HOUR ))-3)
得到的是5号,6号,7号的信息,
可是为什么我始终获取不了今天(8号)的信息呢?
====================
那可能是时区的设置问题导致的。
查询之前使用
set time-zone ='+8:00';
来试一下,另外,建议使用 喜欢选择的 写的语句。他的是正确写法。
热心网友
时间:2022-04-14 05:50
LS误导人.
---------
begintime存的是格林威治时间, 也就是1970年1月1日到当前的秒数.
这个问题有两种方法:
1.利用mysql内置函数unix_timestamp
$sql = "SELECT * FROM `{$db_dbname}information` WHERE a = 1 AND begintime>=unix_timestamp()-3*86400 ORDER BY hit DESC,begintime DESC LIMIT 0,".$num;
2.利用php函数strtotime
$t = strtotime('-3 days');
$sql = "SELECT * FROM `{$db_dbname}information` WHERE a = 1 AND begintime>=$t ORDER BY hit DESC,begintime DESC LIMIT 0,".$num;