Chcete TIME()
, nikoli 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'
Také bych silně navrhněte escapování všech proměnných, které vkládáte do kódu SQL, pomocí mysql_real_escape_string()
nebo ekvivalentní, i když jste si jisti, že v nich není nic škodlivého, jen abyste si z toho udělali zvyk.
Upozorňujeme, že dotaz, jako je tento, může být ze své podstaty neefektivní, protože nemůže využívat indexy v StartTime
sloupec. Pokud je v tabulce mnoho potenciálně shodných řádků, mohlo by být dobré tabulku denormalizovat vytvořením samostatného sloupce, který by obsahoval pouze časová část StartTime
a nastavení indexu (případně v kombinaci s dalšími relevantními sloupci).