我正在嘗試使用用戶當前時間作為格式為“11:30 AM”的變量進行 sql 查詢。然后,查找大于等于 mysql 數據庫中的記錄。if(isset($_GET['curday'])){ $curday = $_GET['curday']; // users current day value 5 for Friday}if(isset($_GET['time'])){ $time = $_GET['time']; // users current time value 11:30AM $time = preg_replace('/[^0-9]/', '', $time); // replacing the : and AM,PM $query = "SELECT id, Name, Address, Meeting_type, Latitude, Longitude, Thetime, Gender, Dayofweek, 3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - Latitude)*pi()/180/2),2) +COS($origLat*pi()/180 )*COS(Latitude*pi()/180) *POWER(SIN(($origLon-Longitude)*pi()/180/2),2))) as Distance FROM $tableName WHERE Longitude between ($origLon-$dist/cos(radians($origLat))*69) and ($origLon+$dist/cos(radians($origLat))*69) and Latitude between ($origLat-($dist/69)) and ($origLat+($dist/69)) having Distance < $dist AND Meeting_type = $id AND Dayofweek = $curday AND Thetime >= $time ORDER BY Thetime limit 100";}我知道 AM 和 PM 效應會在時間值中找到 >= 值和可能的 : 所以我刪除了所有但數字以嘗試幫助使用 $time = preg_replace('/[^0-9]/', '' , $time); 但仍然無法正確檢索值。我不能在這個現有的數據庫中使用時間戳,所以更喜歡沒有的解決方案。它現在是本地的,我會在完成這項工作后加入 sql 注入安全性。感謝您提供任何意見!
2 回答

胡子哥哥
TA貢獻1825條經驗 獲得超6個贊
您可以使用DATE_FORMAT
mysql 函數將您的VAR_CHAR
列格式化為日期并將您的WHERE
子句應用于它。
在您的情況下,您將有一個這樣的選擇:
SELECT * FROM your_table WHERE DATE_FORMAT(TheTime, "%H:%i %p") > your_value_formatted ORDER BY TheTime

冉冉說
TA貢獻1877條經驗 獲得超1個贊
不是最好的方法,但考慮到你可以做的事情:
REGEXP_REPLACE(Thetime, '[^0-9]', '') >= $time
但請記住,12:00 PM
or1200
在這種情況下將大于1:00 PM
or 100
,這是不正確的。所以你可能想轉換為 24 小時制:
$time = date('Hi', strtotime($time));
然后:
DATE_FORMAT(TheTime, '%H%i') >= $time
因此,從前面的12:00 PM
and示例中1:00 PM
,您將擁有1200
and 1300
。
- 2 回答
- 0 關注
- 222 瀏覽
添加回答
舉報
0/150
提交
取消