<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 This SQL is to obtain specific data based on the number of pages.
But on the foreground page, I want to have a page-turning effect of "Previous Page 1.2.3.4.5 Next Page", so I need to know the sum of the data to calculate it. However, the SQL select * from news_base limit cannot obtain the total number of data.
So I had to write another sql "select * from news_base" which can return an array. Then you can get the total value through length for calculation.
But the two SQLs feel very redundant. . The code feels bloated. .
Is there a better way to achieve the page turning effect?
The front desk uses the ejs template engine.
<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 This SQL is to obtain specific data based on the number of pages.
But on the foreground page, I want to have a page-turning effect of "Previous Page 1.2.3.4.5 Next Page", so I need to know the sum of the data to calculate it. However, the SQL select * from news_base limit cannot obtain the total number of data.
So I had to write another sql "select * from news_base" which can return an array. Then you can get the total value through length for calculation.
But the two SQLs feel very redundant. . The code feels bloated. .
Is there a better way to achieve the page turning effect?
The front desk uses the ejs template engine.
You can use count when performing sql select. Check the related usage yourself.
The total number requires a SQL statement. Use select count(*) from news_base to get the total number.
Indicates that the last two SELECTs actually only query once
<code>SELECT SQL_CALC_FOUND_ROWS * FROM apps limit 2,6; SELECT FOUND_ROWS();//在得到数据后,通过FOUND_ROWS()可以得到不带LIMIT的结果数: </code>
But SQL_CALC_FOUND_ROWS will be slower than COUNT(*)~
If there are no filter conditions, you can save the total number of the list separately, cache it in memory and then spit it out with the list.
You can make two requests when entering the page for the first time: one request for the total quantity and one request for the limit rows.
The total quantity is recorded on the page.
If you want to turn the page later, just send the second request.
There are also situations where only the total quantity is needed, and you should consider developing this interface separately.
If you don’t consider the high network overhead of initial loading, you can directly pull them all locally and do paging on the client.