Sie möchten TIME()
, nicht 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'
Außerdem würde ich stark schlagen Sie vor, alle Variablen, die Sie in SQL-Code einbetten, mit mysql_real_escape_string()
zu maskieren
oder gleichwertig, auch wenn Sie sicher sind, dass sie nichts Schädliches enthalten, nur um es zur Gewohnheit zu machen.
Beachten Sie, dass eine Abfrage wie diese an sich ineffizient sein kann, da sie keine Indizes auf StartTime
verwenden kann Säule. Wenn es in der Tabelle viele möglicherweise übereinstimmende Zeilen gibt, könnte es eine gute Idee sein, Ihre Tabelle zu denormalisieren, indem Sie eine separate Spalte erstellen, in der nur gespeichert wird der Zeitteil von StartTime
und einen Index darauf aufbauen (möglicherweise kombiniert mit anderen relevanten Spalten).