Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add option to disable pagination for rex_list #4785

Closed
AndiLeni opened this issue Oct 6, 2021 · 5 comments · Fixed by #4809
Closed

Add option to disable pagination for rex_list #4785

AndiLeni opened this issue Oct 6, 2021 · 5 comments · Fixed by #4809
Labels
Core REDAXO Core related things Feature Additional functionality

Comments

@AndiLeni
Copy link
Contributor

AndiLeni commented Oct 6, 2021

Hallo,

es wäre schön, wenn die Paginierung für rex_list() deaktiviert werden könnte.
Aktuell macht rex_list() einen SELECT SQL_CALC_FOUND_ROWS Aufruf, welcher ab einer gewissen Zeilenanzahl sehr unperformant läuft.
Zudem benötigen manche Addons die Paginierung nicht, beispielsweise weil diese eine JS Bibliothek wie Datatables für die Paginierung verwenden.

Hier ein Beispiel wie viel diese zusätzliche Anfrage ausmachen kann:
grafik

REDAXO: 5.12
PHP: 7.4

@TobiasKrais
Copy link
Contributor

TobiasKrais commented Oct 6, 2021

Erlebe das schon in der Praxis. Das statistics Addon ist aufgrund dieser fehlenden Option extrem langsam, da bei mir viele Datensätze vorhanden sind.

@gharlan
Copy link
Member

gharlan commented Oct 7, 2021

Von SQL_CALC_FOUND_ROWS müssen wir übrigens sowieso weg, da deprecated: #4296

Aber unabhängig davon können wir gerne auch einen Modus ganz ohne Paginierung einbauen.
Ich schlage vor, den $rowsPerPage-Parameter nullable zu machen, und wenn null, dann keine Paginierung: https://github.com/redaxo/redaxo/blob/main/redaxo/src/core/lib/list.php#L132

Mag das einer von euch vielleicht als PR umsetzen?

@gharlan gharlan added Core REDAXO Core related things Feature Additional functionality labels Oct 16, 2021
@staabm
Copy link
Member

staabm commented Oct 17, 2021

Soweit ich mich erinnere wurde das problem im Slack weiter eingegrenzt.

Am ende hat ein index in der db gefehlt und das SQL_CALC_FOUND_ROWS hatte mit dem eigentlichen Problem nix zu tun

@kodiakhq kodiakhq bot closed this as completed in #4809 Oct 21, 2021
@AndiLeni
Copy link
Contributor Author

Danke für die schnelle Umsetzung!

Wenn ich das richtig verstehe wird das deaktivieren erst ab redaxo 5.13 möglich sein, oder?
Wie verhält der Code sich da in älteren Versionen, wenn die pagination Länge auf Null gesetzt wird?

@gharlan
Copy link
Member

gharlan commented Oct 21, 2021

Wenn ich das richtig verstehe wird das deaktivieren erst ab redaxo 5.13 möglich sein, oder?

Ja richtig.

Wie verhält der Code sich da in älteren Versionen, wenn die pagination Länge auf Null gesetzt wird?

Ich vermute genauso wie 0, also wahrscheinlich werden 0 Datensätze pro Seite angezeigt.

Ungetestet, aber ich würde es daher so in der Art notieren, wenn ich kompatibel zu älteren Versionen bleiben möchte:

$list = rex_list::factory($query, defined(rex_list::class.'::DISABLE_PAGINATION') ? rex_list::DISABLE_PAGINATION : 100000);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Core REDAXO Core related things Feature Additional functionality
Development

Successfully merging a pull request may close this issue.

4 participants