javascript - Wie erhält man in Bezug auf die Art und Weise, wie NodeJS das Artikel-Paging durchführt, die Gesamtzahl der umgeblätterten Seiten?

WBOY
Freigeben: 2016-08-04 09:20:14
Original
1249 Leute haben es durchsucht

<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>
Nach dem Login kopieren
Nach dem Login kopieren

select * from news_base limit Diese SQL dient dazu, spezifische Daten basierend auf der Anzahl der Seiten abzurufen.
Aber auf der Vordergrundseite möchte ich einen Umblättereffekt von „Vorherige Seite 1.2.3.4.5 Nächste Seite“ haben, also muss ich die Summe der Daten kennen, um sie zu berechnen. Das SQL-Limit „select * from news_base“ kann jedoch nicht die Gesamtzahl der Daten ermitteln.

Also musste ich eine weitere SQL „select * from news_base“ schreiben, die ein Array zurückgeben kann. Dann können Sie den Gesamtwert durch die Länge zur Berechnung ermitteln.

Aber die beiden SQLs wirken sehr überflüssig. . Der Code fühlt sich aufgebläht an. .
Gibt es eine bessere Möglichkeit, den Umblättereffekt zu erzielen?
Die Rezeption verwendet die EJS-Vorlagen-Engine.

Antwortinhalt:

<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>
Nach dem Login kopieren
Nach dem Login kopieren

select * from news_base limit Diese SQL dient dazu, spezifische Daten basierend auf der Anzahl der Seiten abzurufen.
Aber auf der Vordergrundseite möchte ich einen Umblättereffekt von „Vorherige Seite 1.2.3.4.5 Nächste Seite“ haben, also muss ich die Summe der Daten kennen, um sie zu berechnen. Das SQL-Limit „select * from news_base“ kann jedoch nicht die Gesamtzahl der Daten ermitteln.

Also musste ich eine weitere SQL „select * from news_base“ schreiben, die ein Array zurückgeben kann. Dann können Sie den Gesamtwert durch die Länge zur Berechnung ermitteln.

Aber die beiden SQLs wirken sehr überflüssig. . Der Code fühlt sich aufgebläht an. .
Gibt es eine bessere Möglichkeit, den Umblättereffekt zu erzielen?
Die Rezeption verwendet die EJS-Vorlagen-Engine.

Sie können count bei der SQL-Auswahl verwenden. Überprüfen Sie die entsprechende Verwendung.

Die Gesamtzahl erfordert eine SQL-Anweisung. Verwenden Sie select count(*) von news_base, um die Gesamtzahl zu erhalten.

Methode, die angibt, dass die letzten beiden SELECTs eigentlich nur einmal abfragen

<code>SELECT SQL_CALC_FOUND_ROWS  * FROM apps limit 2,6;
SELECT FOUND_ROWS();//在得到数据后,通过FOUND_ROWS()可以得到不带LIMIT的结果数:

</code>
Nach dem Login kopieren

Aber SQL_CALC_FOUND_ROWS ist langsamer als COUNT(*)~

Wenn keine Filterbedingungen vorliegen, können Sie die Gesamtzahl der Liste separat speichern, im Speicher zwischenspeichern und dann mit der Liste ausspucken.

Sie können beim ersten Betreten der Seite zwei Anfragen stellen: eine Anfrage für die Gesamtmenge und eine Anfrage für die Limitzeilen.
Die Gesamtmenge wird auf der Seite erfasst.
Wenn Sie die Seite später umblättern möchten, senden Sie einfach die zweite Anfrage.

Es gibt auch Fälle, in denen nur die Gesamtmenge erforderlich ist, und Sie sollten darüber nachdenken, diese Schnittstelle separat zu entwickeln.

Wenn Sie den hohen Netzwerkaufwand beim anfänglichen Laden nicht berücksichtigen, können Sie sie alle direkt lokal abrufen und das Paging auf dem Client durchführen.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage