Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL Select :wobei time größer als und kleiner als time ist

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).