sql >> Databasteknik >  >> RDS >> Mysql

MySQL Välj :där tiden är längre än och kortare än tiden

Du vill ha TIME() , inte 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'

Jag skulle också starkt föreslå att du undviker alla variabler du bäddar in i SQL-kod med mysql_real_escape_string() eller motsvarande, även om du är säker på att det inte finns något skadligt i dem, bara för att göra det till en vana.

Observera att en fråga som denna kan vara ineffektiv, eftersom den inte kan använda index på StartTime kolumn. Om det finns många potentiellt matchande rader i tabellen kan det vara en bra idé att avnormalisera tabellen genom att skapa en separat kolumn som lagrar endast tidsdelen av StartTime och sätta upp ett index på det (eventuellt kombinerat med andra relevanta kolumner).



  1. MYSQL 8 Hours Timeout Problem

  2. Skapa dynamiskt select-sats i Oracle 12c

  3. Skapa kolumn av typen dubbel precision[] med liquibase

  4. VB.net - infoga/hämta bild från mysql-databasen direkt till/från en bildlåda