<code>router.get("/:page",function(req,res){ if(req.params.page == 0){ res.send("<div style='font-size:16px;font-weight:bold;color:red'>404</div>"); } conn.query("select * from news_base",function(err,pdata){ conn.query("select * from news_base limit "+(req.params.page-1)*3+",3",function(err,data){ res.render("admin/list",{datas : pdata,pageDatas : data}); }); }); }); </code>
select * from news_base limit 這條sql是根據頁數取得特定的資料。
可是在前台頁面 我要做一個翻頁的 「上一頁 1.2.3.4.5 下一頁」的效果,那就要知道資料的總和才能計算。但是 select * from news_base limit 這個sql取得不到資料的總和數。
所以只好再寫一條sql “select * from news_base ” 這個就可以回傳一個陣列。然後透過length就可以拿到總數值來計算。
但是兩個sql感覺很多餘一樣。 。感覺代碼很臃腫。 。
還有沒有更好的方法來達到翻頁的效果。
前台用的是ejs模板引擎。
<code>router.get("/:page",function(req,res){ if(req.params.page == 0){ res.send("<div style='font-size:16px;font-weight:bold;color:red'>404</div>"); } conn.query("select * from news_base",function(err,pdata){ conn.query("select * from news_base limit "+(req.params.page-1)*3+",3",function(err,data){ res.render("admin/list",{datas : pdata,pageDatas : data}); }); }); }); </code>
select * from news_base limit 這條sql是根據頁數取得特定的資料。
可是在前台頁面 我要做一個翻頁的 「上一頁 1.2.3.4.5 下一頁」的效果,那就要知道資料的總和才能計算。但是 select * from news_base limit 這個sql取得不到資料的總和數。
所以只好再寫一條sql “select * from news_base ” 這個就可以回傳一個陣列。然後透過length就可以拿到總數值來計算。
但是兩個sql感覺很多餘一樣。 。感覺代碼很臃腫。 。
還有沒有更好的方法來達到翻頁的效果。
前台用的是ejs模板引擎。
sql select的時候是可以使用count的,自己查一下相關用法吧。
總數得佔用一條sql,用select count(*) from news_base 取得總數吧。
顯示上兩次SELECT實際上只查詢一次的方法
<code>SELECT SQL_CALC_FOUND_ROWS * FROM apps limit 2,6; SELECT FOUND_ROWS();//在得到数据后,通过FOUND_ROWS()可以得到不带LIMIT的结果数: </code>
但是SQL_CALC_FOUND_ROWS在速度上會比COUNT(*)慢~
如果沒有過濾條件 可以把列表總數單獨存下來 內存緩存一下後隨列表吐出。
可以首次進入頁面時候發出兩個請求:一個請求總數量,一個請求limit行。
總數量記錄在頁面中。
之後翻頁的話只發第二個請求即可。
只需要總數量的情況也是存在的,應該考慮單獨開發這個介面。
如果不考慮初次載入網路開銷大的問題的話,可以直接全部拉到本地,在客戶端做分頁。