mysql 语句问题,非常奇怪的现象

来源:百度知道 编辑:UC知道 时间:2024/05/04 18:38:01
select * from discuz.cdb_threads where (UNIX_TIMESTAMP(curdate())-dateline)+86400<86400
可以查询到结果

写成
select * from discuz.cdb_threads where (UNIX_TIMESTAMP(curdate())-dateline)<0
无结果

写成
select * from discuz.cdb_threads where (UNIX_TIMESTAMP(curdate())-dateline)+76400<76400
可以查询到结果

写成
select * from discuz.cdb_threads where (UNIX_TIMESTAMP(curdate())-dateline)+46400<46400
就又没结果了,

写成这样
select * from discuz.cdb_threads where UNIX_TIMESTAMP(curdate())-dateline+54400<54400
可以查询到一条记录

这是怎么回事
提取discuz论坛数据库帖子时遇到的问题,现在用的是(UNIX_TIMESTAMP(curdate())-dateline)+86400<86400
这句笨方法,可以正常显示,但是感觉真是TMD别扭。效果www.fengcu.com,正在弄还没做好
[说明: dateline 是一个字段名,数值是 距1970.1.1 的秒数]
现在问题出在为什么
(UNIX_TIMESTAMP(curdate())-dateline)<0

(UNIX_TIMESTAMP(curdate())-dateline)+86400<86400
不等价 <

UNIX_TIMESTAMP(curdate())-dateline 是变量。

----

问题补充:

具体说UNIX_TIMESTAMP(curdate())可能是变量,变量就是实时变化的,当你第一次查询

where UNIX_TIMESTAMP(curdate())-dateline)+86400<86400

这个条件的时候这个数值是满足条件的,但是第二次查询

where (UNIX_TIMESTAMP(curdate())-dateline)

这个条件的时候UNIX_TIMESTAMP(curdate())这部分有变化。按数学的角度分析

不等式两边同时加上一个数86400应该不改变不等式性质,但是如果

UNIX_TIMESTAMP(curdate())有变化那情况就完全不同了,where 的逻辑不等式

的Boolean值(Tree or False)就会改变,不知道这样说清了没。

dateline 是指发贴时 距1970.1.1 的秒数么?

UNIX_TIMESTAMP(curdate())-dateline<0 是要选出当天的帖子?

我理解是数据类型的问题。
UNIX_TIMESTAMP(curdate())的到的结果是一个大整数,
如果它dateline大,则没有问题,
如果它比dateline小,则得到的结果是0.

这也就是(UNIX_TIMESTAMP(curdate())-dateline)<0

(UNIX_TIMESTAMP(curdate())-dateline)+86400<86400
不等价的原因所在

你可以测试一下.
如果要参与计算的话最好cast一下,转换为有符号的整数

最好说明一个你的:unix_timestamp(curdate())-deatline是什么东东~~
还有就是你的表有没什么记录,写