我有一个接受两个时间参数的函数:$start_time$end_time每个参数在php中定义为时间

$start_time = date("H:i:s",strtotime($start)); ->like "06:12:44"
$end_time = date("H:i:s",strtotime($end)); ->like "08:22:14"

我想建立一个查询,给出这些时间之间的结果
这是我的职责
function statistics_connected_hour($gateway_id , $date_sql ,$start_time ,$end_time){
$statistics_connected = mysql_query(

    "SELECT *
       FROM cdr_table
       WHERE OwnerUserID ='$_SESSION[user_id]'
       AND GatewayID = $gateway_id
       AND DATE(Dialed) = $date_sql
       AND Dialed != 0
       AND Hour(StartTime) BETWEEN ('$start_time') AND ('$end_time')
    ");

return $statistics_connected;
}

数据库中的StartTime列定义为“2012-12-28 13:32:28”

该查询不返回任何结果,尽管应该返回
当我检查->
$num = mysql_num_rows($statistics_connected);

它总是在$ num中返回0

谁能帮助我了解问题所在?

最佳答案

您需要 TIME() ,而不是 HOUR()

SELECT * FROM cdr_table
WHERE OwnerUserID = '$_SESSION[user_id]'
  AND GatewayID = $gateway_id
  AND DATE(Dialed) = $date_sql
  AND Dialed != 0
  AND TIME(StartTime) BETWEEN '$start_time' AND '$end_time'

另外,我强烈建议您使用 mysql_real_escape_string() 或等效代码对所有要嵌入到SQL代码中的变量进行转义,即使您确定其中没有任何危害,也只是为了养成习惯。

请注意,这样的查询可能本质上效率低下,因为它无法利用StartTime列上的索引。如果表中有很多潜在匹配的行,则可以通过创建单独的列以仅对StartTime的时间部分进行存储并在其上建立索引(可能与其他相关列组合)来对表进行非规范化,这是一个好主意。 )。

关于MySQL选择: where time is greater then and less than time,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14085923/

10-14 13:00