我用的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号)的信息呢?
展开
 我来答
西门蛤蟆
2010-09-08 · TA获得超过1021个赞
知道小有建树答主
回答量:597
采纳率:0%
帮助的人:0
展开全部
你的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;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hotdigger
2010-09-08 · TA获得超过3590个赞
知道大有可为答主
回答量:1458
采纳率:50%
帮助的人:657万
展开全部
我后面是这么写的:to_days(from_unixtime(begintime)) >= (to_days(DATE_ADD( UTC_TIMESTAMP( ) , INTERVAL 8 HOUR ))-3)
得到的是5号,6号,7号的信息,
可是为什么我始终获取不了今天(8号)的信息呢?
====================
那可能是时区的设置问题导致的。
查询之前使用
set time-zone ='+8:00';
来试一下,另外,建议使用 喜欢选择的 写的语句。他的是正确写法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
喜欢选择的
2010-09-08 · TA获得超过367个赞
知道小有建树答主
回答量:356
采纳率:0%
帮助的人:352万
展开全部
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;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式