
我用的PHP+MYSQL,我想实现通过SQL语句找到近天的信息,并把这些信息按点击排序.而原来只有排序功能
原来的语句是这样的:$sql="SELECT*FROM`{$db_dbname}information`WHEREa=1ORDERBYhitDESC,begintimeD...
原来的语句是这样的:
$sql = "SELECT * FROM `{$db_dbname}information` WHERE a = 1 ORDER BY hit DESC,begintime DESC LIMIT 0,".$num;
我自己改成这样的:
$sql = "SELECT * FROM `{$db_dbname}information` WHERE a = 1 AND to_days(begintime)>=(to_days(now())-3) ORDER BY hit DESC,begintime DESC LIMIT 0,".$num;
其实就是WHERE那里多增加了一个条件:to_days(begintime)>=(to_days(now())-3)
但是我发现这样取到的信息是空的,我直接写to_days(begintime)>0得到的也是空的
而begintime是一个字段,内容是这样的:1282875898 应该是一个转换成数字的时间
但是为什么没有效果呢?是不是因为begintime里的时间跟now()不一样?
谁能帮我解决这个问题,成功实现获取3天内的信息,并排序,分就给他了.
西门蛤蟆 纯属胡说.
我后面又到网上找了下,找到的结果与"喜欢选择的"的类似,不过我用的是from_unixtime这个函数,跟unix_timestamp是相反的
成是成功了,但是有点小问题,取出来的信息只有4号到7号的,不是5号到8号的,是不是因为我的主机在国外,用now()取得的时间有时差的问题,怎么解决?
我后面是这么写的:to_days(from_unixtime(begintime)) >= (to_days(DATE_ADD( UTC_TIMESTAMP( ) , INTERVAL 8 HOUR ))-3)
得到的是5号,6号,7号的信息,
可是为什么我始终获取不了今天(8号)的信息呢? 展开
$sql = "SELECT * FROM `{$db_dbname}information` WHERE a = 1 ORDER BY hit DESC,begintime DESC LIMIT 0,".$num;
我自己改成这样的:
$sql = "SELECT * FROM `{$db_dbname}information` WHERE a = 1 AND to_days(begintime)>=(to_days(now())-3) ORDER BY hit DESC,begintime DESC LIMIT 0,".$num;
其实就是WHERE那里多增加了一个条件:to_days(begintime)>=(to_days(now())-3)
但是我发现这样取到的信息是空的,我直接写to_days(begintime)>0得到的也是空的
而begintime是一个字段,内容是这样的:1282875898 应该是一个转换成数字的时间
但是为什么没有效果呢?是不是因为begintime里的时间跟now()不一样?
谁能帮我解决这个问题,成功实现获取3天内的信息,并排序,分就给他了.
西门蛤蟆 纯属胡说.
我后面又到网上找了下,找到的结果与"喜欢选择的"的类似,不过我用的是from_unixtime这个函数,跟unix_timestamp是相反的
成是成功了,但是有点小问题,取出来的信息只有4号到7号的,不是5号到8号的,是不是因为我的主机在国外,用now()取得的时间有时差的问题,怎么解决?
我后面是这么写的:to_days(from_unixtime(begintime)) >= (to_days(DATE_ADD( UTC_TIMESTAMP( ) , INTERVAL 8 HOUR ))-3)
得到的是5号,6号,7号的信息,
可是为什么我始终获取不了今天(8号)的信息呢? 展开
3个回答
展开全部
你的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;
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;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我后面是这么写的:to_days(from_unixtime(begintime)) >= (to_days(DATE_ADD( UTC_TIMESTAMP( ) , INTERVAL 8 HOUR ))-3)
得到的是5号,6号,7号的信息,
可是为什么我始终获取不了今天(8号)的信息呢?
====================
那可能是时区的设置问题导致的。
查询之前使用
set time-zone ='+8:00';
来试一下,另外,建议使用 喜欢选择的 写的语句。他的是正确写法。
得到的是5号,6号,7号的信息,
可是为什么我始终获取不了今天(8号)的信息呢?
====================
那可能是时区的设置问题导致的。
查询之前使用
set time-zone ='+8:00';
来试一下,另外,建议使用 喜欢选择的 写的语句。他的是正确写法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
---------
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;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询