sql >> Database teknologi >  >> RDS >> Mysql

MySQL Vælg :hvor tiden er større og mindre end tiden

Du vil have TIME() , ikke TIME() .

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'

Jeg vil også stærkt foreslå at undslippe alle variabler, du indlejrer i SQL-kode med mysql_real_escape_string() eller tilsvarende, selvom du er sikker på, at der ikke er noget skadeligt i dem, bare for at gøre det til en vane.

Bemærk, at en forespørgsel som denne i sig selv kan være ineffektiv, da den ikke kan gøre brug af indekser på StartTime kolonne. Hvis der er mange potentielt matchende rækker i tabellen, kan det være en god idé at denormalisere din tabel ved at oprette en separat kolonne, der kun gemmer. tidsdelen af ​​StartTime og opsætning af et indeks på det (evt. kombineret med andre relevante kolonner).



  1. Udfør øjeblikkelig ændring af brugerbindingsvariabel

  2. Fjern dublerede rækker i en tabel

  3. DatabaseMetaData.getColumns returnerer et tomt resultatsæt for synonymer

  4. MySQL - hvor længe skal man oprette et indeks?