2015-11-08 6 views
8

Haben Datentabellen haben keine Unterstützung für server-side Abrufen von Daten, bei denen die rocordsTotal Zählung nicht im Voraus bekannt?Tables server Verarbeitung mit unbekannter Anzahl von Zeilen

Wir haben Daten, für die die Abfrage, um die Gesamtzahl zu erhalten, fast so teuer ist, als nur alle Datensätze abzufragen. Es wäre notwendig, wenn es eine Möglichkeit gäbe, um Databases wissen zu lassen, dass die recordsTotal Zählung nicht bekannt ist. Diese Funktionalität ist nicht dokumentiert. Wird es unterstützt?

Update 1: Ich denke, ich habe mein Problem nicht vollständig erklärt und versucht, eine abstrakte Version zu fragen. Ich benutze datatables.net/extensions/scroller Plugin und es funktioniert mit Ajax Option. Wenn ich eine große Nummer für recordsTotal verwende, kann der Benutzer zu der Schaltfläche blättern, und ich habe keine Daten, um dort anzuzeigen. Dasselbe gilt für die Paginierung. Der Benutzer kann auf eine Seitenzahl klicken, die möglicherweise nicht existiert.

+0

Mit welcher Art von Datenbank arbeiten Sie? Was für eine Tabelle/View ist es, da es so lange dauert, bis die Gesamtzahl der Zeilen erreicht ist? – davidkonrad

+0

@davidkonrad https://wiki.postgresql.org/wiki/Slow_Counting –

+0

Das serverseitige Beispiel von DataTable - http://datatables.net/extensions/scroller/examples/initialization/simple.html - scheint nicht zu sein Verwenden der TotalRecords. Hast du ein Problem mit deiner tatsächlichen Einrichtung? – jjbskir

Antwort

3

Ich nehme an "TotalRecords" meinst du "recordsTotal" Feld in dem Objekt, das der Server zu Datenträgern zurückgibt. Sie könnten einfach die nächsten N Seiten zählen, die Ihren Suchkriterien entsprechen, diesen Wert den "recordsFiltered" und "recordsTotal" zuweisen und die Gesamtzahl der Datensätze nicht über die "dom" -Option wiedergeben: Beachten Sie die i-Komponente . Es ist keine integrierte Funktionalität, aber es ist eine mögliche Lösung, die Tabellenanzahl nicht im Voraus zu kennen.

Dadurch wird Datatables mitgeteilt, dass Sie über das Feld "recordsFiltered" mindestens N weitere Seiten durchsehen müssen, damit die Paginierung korrekt funktioniert. Auf diese Weise muss Datatables nicht unbedingt genau wissen, wie viele Datensätze Sie insgesamt haben, um zu arbeiten.

Sie können auch die footerCallback-Option verwenden, um Ihre Datenzusammenfassung unter der Tabelle anzupassen. Werfen Sie einen Blick hier: https://datatables.net/examples/advanced_init/footer_callback.html

Auch, weil Sie in einem Kommentar erwähnt, dass Sie postgresql mit, ich weiß nicht, ob dies für Sie relevant ist oder nicht (ich habe noch nie verwendet, postgresql) https://wiki.postgresql.org/wiki/Count_estimate

+0

Vielen Dank, die ** i ** Option löst eines meiner Probleme. und die Verwendung von ** footer_callback ** ist wirklich nützlich. Ich habe mein Problem in der ursprünglichen Frage nicht vollständig erklärt, ich habe versucht, eine abstrakte Version zu fragen. Ich benutze https://datatables.net/extensions/scroller/ plugin und es funktioniert mit ** Ajax ** -Option. Wenn ich eine große Zahl für ** recordsTotal ** verwende, kann der Benutzer zu der Schaltfläche blättern, und ich habe keine Daten, die dort angezeigt werden. Dasselbe gilt für die Paginierung. Der Benutzer kann auf eine Seitennummer klicken, die möglicherweise nicht existiert. –

+0

Wenn Sie eine Idee für andere Option haben, werde ich sehr geschätzt werden, sonst werde ich noch zwei Tage warten und dann Ihre Antwort akzeptieren.Danke :) –

+0

Verwenden Sie keine beliebig große Zahl. Zählen Sie nur die Seite, auf der Sie sich befinden, und die nächsten Seiten, um sicherzustellen, dass sie vorhanden sind, und legen Sie dann sowohl recordsTotal als auch recordsFiltered auf diese Anzahl fest. Dies sollte schneller sein als die vollständige Zählung der Tabelle. – Jakotheshadows

Verwandte Themen