<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_baselimit 이 SQL은 페이지 수를 기준으로 특정 데이터를 가져오는 SQL입니다.
근데 포그라운드 페이지에서는 "이전 페이지 1.2.3.4.5 다음 페이지"라는 페이지 넘김 효과를 주고 싶어서, 이를 계산하려면 데이터의 합을 알아야 합니다. 그러나 SQL select * from news_base 제한은 총 데이터 수를 얻을 수 없습니다.
그래서 배열을 반환할 수 있는 또 다른 SQL "select * from news_base"를 작성해야 했습니다. 그런 다음 계산을 위해 길이를 통해 총 값을 얻을 수 있습니다.
그러나 두 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_baselimit 이 SQL은 페이지 수를 기준으로 특정 데이터를 가져오는 SQL입니다.
근데 포그라운드 페이지에서는 "이전 페이지 1.2.3.4.5 다음 페이지"라는 페이지 넘김 효과를 주고 싶어서, 이를 계산하려면 데이터의 합을 알아야 합니다. 그러나 SQL select * from news_base 제한은 총 데이터 수를 얻을 수 없습니다.
그래서 배열을 반환할 수 있는 또 다른 SQL "select * from news_base"를 작성해야 했습니다. 그런 다음 계산을 위해 길이를 통해 총 값을 얻을 수 있습니다.
그러나 두 SQL은 매우 중복되는 것처럼 느껴집니다. . 코드가 부풀어 오른 느낌이 듭니다. .
페이지 넘김 효과를 얻을 수 있는 더 좋은 방법이 있나요?
프런트 데스크는 ejs 템플릿 엔진을 사용합니다.
SQL Select를 수행할 때 count를 사용할 수 있으며 관련 사용법을 직접 확인할 수 있습니다.
총 개수를 확인하려면 SQL 문이 필요합니다. news_base에서 select count(*)를 사용하세요.
마지막 두 SELECT가 실제로 한 번만 쿼리함을 나타내는 방법
<code>SELECT SQL_CALC_FOUND_ROWS * FROM apps limit 2,6; SELECT FOUND_ROWS();//在得到数据后,通过FOUND_ROWS()可以得到不带LIMIT的结果数: </code>
그러나 SQL_CALC_FOUND_ROWS는 COUNT(*)보다 느립니다~
필터 조건이 없는 경우 목록의 전체 개수를 별도로 저장하고 메모리에 캐시한 후 목록과 함께 뱉어낼 수 있습니다.
처음 페이지에 들어갈 때 총 수량 요청과 한도 행 요청 두 가지를 요청할 수 있습니다.
총 수량은 페이지에 기재되어 있습니다.
나중에 페이지를 넘기고 싶다면 두 번째 요청을 보내세요.
전체 수량만 필요한 경우도 있는데, 이 인터페이스는 별도로 개발하는 것을 고려해 보시기 바랍니다.
초기 로딩으로 인한 높은 네트워크 오버헤드를 고려하지 않는다면 로컬에서 모두 직접 가져와 클라이언트에서 페이징을 수행할 수 있습니다.