我正在使用一個應用程序,該應用程序使用phpActiveRecord
和mySQL從傳感器網絡中獲取數據並將其繪製到客戶端上的一些flot.js圖形上。返回SQL查詢的每第二行
用戶可以選擇多個時間範圍來影響圖表顯示的數據範圍。 2hrs, 24hrs, 3 days and 1 week.
傳感器每隔60秒發送一次數據到數據庫,因此當繪製圖表時,查詢會在now and DATE_SUB(CUR_DATE - INTERVAL ? DAY)
之間的所有行中拉動,其中?是1,3或7等
然而,這導致大量的行被返回(60,000 + for the full week!)
並導致巨大的延遲和服務器錯誤。
我知道我可以大量增加php.ini
文件中可用於查詢的最大內存,但這不是一個好的解決方案,也不能解決速度問題。
我的問題是,有沒有一種方法可以根據用戶希望查看的時間間隔的長度,輕鬆地從所需的日期範圍中選擇每第二或第三行?
在C或Java中,我會做一些模數select來返回交替行,但我想不出在當前框架中做到這一點的方法。
任何想法,將不勝感激。謝謝。
http://stackoverflow.com/questions/858746/how-do-you-select-every-n-th-row-from-mysql –
謝謝喬希,這些都是很棒的鏈接,但不幸的是,應用程序的方式是結構化和動態生成意味着用戶變量的使用基本上不存在問題。查詢由slim.js路由框架管理,不直接由瀏覽器頁面調用。雖然我很感激!謝謝。 – bisslad
如果你的id是遞增的,你可以使用它(添加一個「奇數」,或者是4/8的倍數,等等等於你的WHERE語句) 另外:你有沒有考慮過爲你的querys使用緩存?即使你可能簡單地使用mysql_result_cache,你也會提高你的性能。 –