sql >> Database >  >> RDS >> Mysql

MySQL Select:waar tijd groter is dan en kleiner dan tijd

U wilt TIME() , niet 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'

Ook zou ik sterk stel voor om alle variabelen die je in de SQL-code insluit te escapen met mysql_real_escape_string() of gelijkwaardig, zelfs als je zeker weet dat er niets schadelijks in zit, gewoon om er een gewoonte van te maken.

Merk op dat een zoekopdracht als deze intrinsiek inefficiënt kan zijn, omdat het geen gebruik kan maken van indexen op de StartTime kolom. Als er veel potentieel overeenkomende rijen in de tabel zijn, kan het een goed idee zijn om uw tabel te denormaliseren door een aparte kolom te maken die alleen opslaat. het tijdgedeelte van de StartTime en het opzetten van een index erop (eventueel gecombineerd met andere relevante kolommen).



  1. Unit testing DDL statements die in een transactie moeten zitten

  2. Haal de op één na hoogste waarde in een MySQL-tabel

  3. Hoe de if/else-voorwaarde te gebruiken in een select in mysql

  4. How-to:Zoekresultaten rangschikken