sql >> Base de Datos >  >> RDS >> Mysql

MySQL Select:donde el tiempo es mayor y menor que el tiempo

Quiere TIME() , no 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'

Además, enfáticamente sugiera escapar todas las variables que está incrustando en el código SQL con mysql_real_escape_string() o equivalente, incluso si está seguro de que no hay nada dañino en ellos, solo para convertirlo en un hábito.

Tenga en cuenta que una consulta como esta puede ser intrínsecamente ineficiente, ya que no puede utilizar índices en el StartTime columna. Si hay muchas filas potencialmente coincidentes en la tabla, podría ser una buena idea desnormalizar su tabla creando una columna separada que almacene solo la parte de tiempo de StartTime y configurar un índice en él (posiblemente combinado con otras columnas relevantes).