这样写的MySQL函数输出什么?

时间:2011-10-07 15:06:04

标签: php mysql function date-format

我从开发人员那里订购了一个项目,我正在尝试修复我在此过程中发现的错误。

一个是带有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中执行时不会返回错误。但它确实没有返回任何东西。

表格如下:

enter image description here

我认为应该只考虑日期(即2011-10-07),而不是确切时间,因为它与查询无关。我只是MySQL的初学者,我不太清楚我在做什么。

任何帮助表示赞赏!

麦克

5 个答案:

答案 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的行。