Pouzitie pagination bez offsetu pre velke DB

duskohu
Člen | 778
+
0
-

Caute, pouzivam klasicky Paginator napr. tento, mam to potom napojene na kdyby/doctrine a nasledne pouzivam bud:

...
$resultSet = $query->getResult();
$resultSet->applyPaginator($paginator);
...

alebo si vytvaram query nejaky builder a vlozim `firstResult` a `maxResults`
$query = $this->em->getRepository(Tour::class)
->createQueryBuilder()
->select('q')
->from(Tour::class, 'q')
->andWhere('q.publicity = :publicity')
->setParameter('publicity', Tour::PUBLICITY_PUBLIC)
->setFirstResult($paginator->getOffset())
->setMaxResults($paginator->getLength());

Problem je v tom ze tento system funguje na principe LIMIT, OFFSET a ked mam uz velky pocet zaznamov co ja mam okolo 2000000 tak to strankovanie skoncilo :-).

Neviiete mi poradit nejake funkcne riesenie, kto ma uz skusenost a pouzitie paginatora?

David Matějka
Moderator | 6445
+
+1
-

a potrebujes tak velke offsety? pokud nekdo potrebuje strankovat vice jak deset stranek, tak je spise spatne navrzene rozhrani (chybejici filtrovani, razeni). ani google ti nedovoli strankovat do nekonecna :)

pro urcite situace muze byt vhodne strankovat pres ID, tedy vybrat vzdy prvnich 10, ktere maji ID vetsi/mensi nez posledni zaznam na predchozi strance (v url tedy nebudes prenaset offset, respetkive page, ale to dane id)

jinak ResultSet z kdyby/doctrine se muze zrychlit nastavenim vypnutim setFetchJoinCollection a setUseOutputWalkers – ale pozor, je mozne to vypnout pouze v pripade, ze nejoinujes „has many“ relace

Kcko
Člen | 468
+
0
-

David Matějka napsal(a):

a potrebujes tak velke offsety? pokud nekdo potrebuje strankovat vice jak deset stranek, tak je spise spatne navrzene rozhrani (chybejici filtrovani, razeni). ani google ti nedovoli strankovat do nekonecna :)

Davide, toto mě zaujalo.
Jak mám dle tvé idey přepracovat stránkování kategorie článků? http://spanelskyfotbal.cz/…era-division

David Matějka
Moderator | 6445
+
+1
-

@Kcko je nejaky duvod, aby nekdo klikal na stranu 353?

takze co muzes udelat:

  • odebrat proklik na posledni stranku
  • zvazit i odebrani toho strankovani o nekolik stranek dobredu a nechat tam jen predchozi/nasledujici
  • pridat nejake filtrovani dle data, treba jen dle roku
Kcko
Člen | 468
+
+1
-

David Matějka napsal(a):

@Kcko je nejaky duvod, aby nekdo klikal na stranu 353?

takze co muzes udelat:

  • odebrat proklik na posledni stranku
  • zvazit i odebrani toho strankovani o nekolik stranek dobredu a nechat tam jen predchozi/nasledujici
  • pridat nejake filtrovani dle data, treba jen dle roku

Asi máš pravdu, vhodnější bude prvních X článků a pak proklik do archivu a tam to nějak šikovně vyobrazit podle roků a měsíců. Díky.

Zrealizováno ;-) http://spanelskyfotbal.cz/archiv-clanku je to asi vážně lepší.

Editoval Kcko (24. 4. 2018 17:07)

duskohu
Člen | 778
+
0
-

@David Matějka dakujem za odpoved, konkterne ide o portal kde je ponuka zajazdov, a normalne clovek nestrankuje do nekonecna, ja mam aj filter a radenie, ale ide mi o roborov ktory prechadzaju stranku a kedze mam aj stranku kde je filter bez dat tak sa daju strankovat vsetky ponuky, a to chcem aby robot presiel.

to sideckami sa mi paci, nerobili ste toto riesenie niekto s paginatorom?

Editoval duskohu (20. 4. 2018 22:52)