iT邦幫忙

0

MySQL 撈取限定時間資料的方法

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 比較好
所以希望可以請益其他的方式

2 個回答

14
wiseguy
iT邦超人 1 級 ‧ 2011-12-26 14:22:56
最佳解答

依照 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'
6
Albert
iT邦高手 1 級 ‧ 2011-12-26 15:34:12

Count 後 去 insert 是很浪費資源的行為

是應該直接去 insert 用 index 去防堵

chan15 iT邦新手 5 級 ‧ 2011-12-26 15:50:06 檢舉

請問可以給點提示嗎 XD

chan15 iT邦新手 5 級 ‧ 2011-12-31 03:51:18 檢舉

不過這樣好像只適用於以一為單位的例子,假設兩小時才可以投票的話應該無解吧?

Albert iT邦高手 1 級 ‧ 2011-12-31 08:22:24 檢舉

chan15提到:
上面有筆誤,一天一次或一小時一次

古有明訓:
人到無求品自高
若到無[]求無方

我要發表回答

立即登入回答