我有一个接受两个时间参数的函数:$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(), not 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'
另外,我还想strongly建议转义您在 SQL 代码中嵌入的所有变量mysql_real_escape_string()或同等的东西,即使你确定它们没有任何害处,只是为了让它成为一种习惯。
请注意,像这样的查询本质上可能效率低下,因为它无法利用StartTime
柱子。如果表中有很多可能匹配的行,那么通过创建单独的列存储来对表进行非规范化可能是个好主意only的时间部分StartTime
并在其上设置索引(可能与其他相关列组合)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)