我从开发人员那里订购了一个项目,我正在尝试修复我在此过程中发现的错误。
一个是带有DATE_FORMAT()函数的MySQL查询,这使得查询不返回任何内容。
SELECT * FROM food_cart
WHERE cart_userId='3'
AND cart_itemId='8'
AND date_format(cart_date,'%Y-%m-%d %H')='".date("Y-m-d")."'
代码似乎格式正确,因为它在phpMyAdmin中执行时不会返回错误。但它确实没有返回任何东西。
表格如下:
我认为应该只考虑日期(即2011-10-07),而不是确切时间,因为它与查询无关。我只是MySQL的初学者,我不太清楚我在做什么。
任何帮助表示赞赏!
麦克
答案 0 :(得分:1)
MySQL不需要为自己的字段进行日期翻译
只需确保以yyyy-mm-dd
格式输入参数。
$date = date('Y-m-d',$adate);
$query = "SELECT * FROM food_cart
WHERE cart_userId = '3'
AND cart_itemId = '8'
AND cart_date BETWEEN '$date' AND DATE_ADD('$date', interval 1 day)
-- and car_date <> DATE_ADD('$date', interval 1 day)
如果您每天走这个查询,请取消注释最后一部分,以消除全包BETWEEN中的1秒重叠。这将防止激烈的重复。
答案 1 :(得分:0)
答案 2 :(得分:0)
当date("Y-m-d")
传递给查询时,它假定小时,分钟,秒为00:00:00。这就是为什么它没有返回任何东西。您可能需要进行范围搜索,以便从同一天的午夜到11:59:59。
答案 3 :(得分:0)
更改此行:
date_format(cart_date,'%Y-%m-%d %H')='".date("Y-m-d")."'
这将产生类似以下内容(永远不会是正确的):
'2011-10-07 16'='2011-10-07'
取而代之的是
date( cart_date )='".date("Y-m-d")."'
如果您要比较日期,请确保等式的两边具有相同的精度。
编辑:这里是完整清理过的PHP代码:
$date = date( 'Y-m-d' );
$sql = 'SELECT * '
. 'FROM food_cart '
. 'WHERE cart_userId = 3 '
. ' AND cart_itemId = 8 '
. " AND date( cart_date ) = '$date'";
它应生成类似SELECT ... FROM ... WHERE ... AND date( cart_date ) = '2011-07-10'
的语句,它将正确处理日期过滤。
答案 4 :(得分:0)
根据要求,这是我的Johan's answer版本:
$date = date( "Y-m-d", $timestamp );
$sql = "SELECT * FROM food_cart
WHERE cart_userId = '3'
AND cart_itemId = '8'
AND cart_date >= '$date'
AND cart_date < '$date' + INTERVAL 1 DAY";
此查询
cart_date
,cart_date
的日期部分等于$date
的行。