CASE 常常會遇到一種狀況就是
某個 IP 一天只能留一次言,或者是一天只能留一次
所以會以 IP 以及留言時間當作基準撈取是否座落於該區間
以一個 IP 兩小時為例,目前我使用的方式是:
sprintf("SELECT * FROM table WHERE DATE_ADD(build_date, INTERVAL 1 HOUR) > NOW() AND ip = '%s'", $_SERVER['REMOTE_ADDR']);
我聽說可以的話盡量少在 MySQL 裡面使用 function,對 performance 比較好
所以希望可以請益其他的方式
依照 mysql 的建議,欄位最好不要運算,效能會比較好。
所以你的 SQL where 條件本來是
build_date + 1h > NOW
把它改成
build_date > NOW - 1h
就有不錯的效果。
<pre class="c" name="code">
SELECT count(*) FROM table
WHERE build_date > DATE_SUB(NOW(), INTERVAL 1 HOUR) AND ip = '%s'
Count 後 去 insert 是很浪費資源的行為
是應該直接去 insert 用 index 去防堵