我使用以下语句从mysql表中选择值:
$a = mysqli_query($con, "SELECT * FROM list WHERE inserted_on<=DATE_SUB(CURDATE(), INTERVAL 0 DAY)");
while($row = mysqli_fetch_array($a))
{ //do something...
}
但是查询会跳过12月(第12个月)的结果......
inserted_on行看起来像这样(示例):
2013-12-04 17:50:34 //edited so that it reflects an actual example
year-month-date hour:minute:second
知道为什么......也许是问题的解决方案?
答案 0 :(得分:0)
我将尝试根据留下的评论对此进行一次尝试。
我不确定你需要的确切结果,但其中任何一个都应该足够了:
SELECT * FROM list WHERE DATE(inserted_on) <= CURDATE();
OR
SELECT * FROM list WHERE inserted_on <= NOW();
第二个是从运行时角度来看更好的解决方案,特别是如果你的日期被编入索引。
编辑:
注意我在这做什么。
在第一个,因为CURDATE()仅返回2013-01-01,例如你的字段返回一个时间戳然后检查00:00:00和23:59:59之间的所有时间我基本上是说让我只有我的inserted_on字段的DATE,并将其与curdate()进行比较。
在第二个我现在说的()将是2013-12-09 10:54:19这个帖子的日期/时间,我将你的时间戳与2013-01格式表中的时间戳进行比较-01 00:00:00(作为例子)。
答案 1 :(得分:0)
鉴于此示例代码,基于您的示例,它与我一起工作(使用MySQL版本5.0.51b-community-nt
,但这不太重要):
DROP TABLE IF EXISTS `test`.`list`;
CREATE TABLE `test`.`list` (
`id` int(10) unsigned NOT NULL auto_increment,
`inserted_on` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO list VALUES( null, '2013-12-04 17:50:34' );
INSERT INTO list VALUES( null, '2013-12-23 17:50:34' );
然后当我执行你的查询时:
SELECT * FROM list WHERE inserted_on <= DATE_SUB(CURDATE(), INTERVAL 0 DAY);
或:
SELECT * FROM list WHERE inserted_on <= CURDATE();
甚至,例如:
SELECT * FROM list WHERE inserted_on <= DATE_SUB(CURDATE(), INTERVAL 1 DAY);
结果是:
| id | inserted_on |
+----+---------------------+
| 1 | 2013-12-04 17:50:34 |
......正如所料。
因此,您的代码中肯定会发生其他事情,我们并不知道。例如:
inserted_on
使用的数据类型是什么(即使文本列也可以正常工作)进一步的问题:
$a
电话后立即执行var_dump( $a );
时,mysqli_query( ... )
的价值是多少?是false
吗?