Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Paginacja a rekurencja
Forum PHP.pl > Forum > Przedszkole
snerf
Witam

Mam skrypt:
  1. function buildTree(array $elements, $parentId = 0) {
  2. $branch = array();
  3.  
  4. foreach ($elements as $element) {
  5. if ($element['qoute_id'] == $parentId) {
  6. $children = buildTree($elements, $element['id']);
  7. if ($children) {
  8. $element['children'] = $children;
  9. }
  10. if(isset($_GET['id3'])){ $gettrzy = $_GET['id3']; }else{ $gettrzy = 1; };
  11. $element['seo_link'] = $_GET['id2'].'/'.$gettrzy;
  12. $branch[] = $element;
  13. }
  14. }
  15.  
  16. return $branch;
  17. }
  18.  
  19. $wiersz = $stmt ->fetchAll(PDO::FETCH_ASSOC);
  20. $tree = buildTree($wiersz);


Załóżmy że dane rekordy:

Id: 1
Name: abc
Parent: 0

Id: 2
Name: abc
Parent: 1

Id: 3
Name: abc
Parent: 1

Id: 4
Name: abc
Parent: 0

I teraz robię stronicowanie wiadomo "ORDER BY time ASC LIMIT ohmy.gifd, biggrin.gifo"... załóżmy że wpisze wyświetlanie rekordów x2 na stronę a kod tworzenia drzewka psuje resztę ponieważ jak w przykładzie ID: 3 już na kolejnej podstronie niema rodzica tongue.gif.

Jak rozwiązać ten problem? tak aby rekord dopisywał się do drzewka?

@refresh
Nie mogę sobie z tym poradzić. :/

Chodzi o to by zrobić te stronicowanie i wyświetlać normalnie komentarze raz ich odpowiedzi.
pasman
Cytat(snerf @ 21.03.2015, 05:15:02 ) *
Chodzi o to by zrobić te stronicowanie i wyświetlać normalnie komentarze raz ich odpowiedzi.


jak dokładnie chcesz podzielić ten kontent na strony ?

możesz najpierw pobrać zadaną ilość artykułów na stronie za pomocą limit (parent=0),
a później pobrać dla nich wszystkie komentarze.

możesz też zrobić osobne stronicowanie dla artykułów,
a osobne dla komentarzy.
snerf
Cytat
jak dokładnie chcesz podzielić ten kontent na strony ?

1/2/3/4 itd paginacje mam napisaną teraz tylko podzielić te treść.


Cytat
możesz najpierw pobrać zadaną ilość artykułów na stronie za pomocą limit (parent=0),
a później pobrać dla nich wszystkie komentarze.

To są komentarze w formie odpowiedzi do 3 (drzewko).
Ten sposób będzie wymagał zbyt dużej ilości zapytań a tak jednym pobieram i tworzę drzewko w tablicy potem wyświetlam.
I wszystko śmiga. Lecz problem pojawia się jak chciałem użyć paginacji bo ucinam koniec strony w losowych miejscach np jak dałem przykład 1 poście.


Cytat
Załóżmy że dane rekordy:

Id: 1
Name: abc
Parent: 0

Id: 2
Name: abc
Parent: 1

Id: 3
Name: abc
Parent: 1

Id: 4
Name: abc
Parent: 0

I teraz robię stronicowanie wiadomo "ORDER BY time ASC LIMIT od, do"... załóżmy że wpisze wyświetlanie rekordów x2 na stronę a kod tworzenia drzewka psuje resztę ponieważ jak w przykładzie ID: 3 już na kolejnej podstronie niema rodzica.


Niewiem jak to wytłumaczyć ale np jak dam LIMIT Komentarzy na 2:

To potem (id#3) już się nie pokaże na stronie numer #2 gdyż niema rodzica z id#1.
I niewiem jak rozwiązać ten problem by pobierało albo rodzica i jego komentarze ale co bym preferował by zapisywało ten rekord id#3 do drzewka a w miejsce rodzica wyżej tworzyło pustke w tablicy.

pasman
Cytat(snerf @ 21.03.2015, 11:18:03 ) *
To potem (id#3) już się nie pokaże na stronie numer #2 gdyż niema rodzica z id#1.
I niewiem jak rozwiązać ten problem by pobierało albo rodzica i jego komentarze ale co bym preferował by zapisywało ten rekord id#3 do drzewka a w miejsce rodzica wyżej tworzyło pustke w tablicy.



takie podejście może spowodować że jeśli komentarzy będzie więcej niż 2,
to pojawią się puste strony.

proponuję jednak pobierać stałą ilość wątków.
w tabeli do komentarza dodajesz dodatkowe pole przechowujące id głównego rodzica
  1. rootParentId

wtedy pierwszym zapytaniem pobierasz stała ilość głównych artykułów

  1. SELECT * FROM comments
  2. WHERE id=rootParentId
  3. ORDER BY time DESC
  4. LIMIT 2,0


drugim zapytaniem pobierasz wszystkie komentarze do nich

  1. SELECT * FROM comments
  2. WHERE rootParentId IN (...)


i na podstawie tych danych budujesz drzewo.
Edit: właściwie te 2 zapytania można połączyć w jedno:

  1. SELECT * FROM comments
  2. WHERE rootParentId IN (
  3. SELECT id FROM comments
  4. WHERE id=rootParentId
  5. ORDER BY time DESC
  6. LIMIT 2,0
  7. )
snerf
Pasman,
Ale ja już mam rodzica..
https://docs.google.com/file/d/0B3CjXfITBCT...XZfbkhyWWs/edit

Chce tylko w możliwy sposób podzielić to na podstrony by nie rozsypać tablicy.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.