我有一个接受两个时间参数的函数:$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
谁能帮助我了解问题所在?
最佳答案
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/