Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL Select :où le temps est supérieur à et inférieur au temps

Vous voulez TIME() , pas 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'

Aussi, j'aimerais fortement suggère d'échapper toutes les variables que vous intégrez dans le code SQL avec mysql_real_escape_string() ou équivalent, même si vous êtes sûr qu'ils ne contiennent rien de nocif, juste pour en faire une habitude.

Notez qu'une requête comme celle-ci peut être intrinsèquement inefficace, car elle ne peut pas utiliser d'index sur StartTime colonne. S'il y a beaucoup de lignes potentiellement correspondantes dans le tableau, il peut être judicieux de dénormaliser votre tableau en créant une colonne séparée stockant uniquement la partie horaire de StartTime et la création d'un index dessus (éventuellement combiné avec d'autres colonnes pertinentes).