Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: komentarze i paginacja, optymalizacja
Forum PHP.pl > Forum > PHP
jarmiar
Wcześniej miałem pobierane komentarze rekurencyjnie i za kazdym wywołaniem rekurencyjnym wykonywane było zapytanie do bazy. Postanowiłem to zmienić i pobrać wszystkie komentarze, a potem w phpie zrobic sobie z nich drzewko - też rekurencyjnie, ale już bez zbędnych zapytańwink.gif (moje komentarze oparte sa na drzewku, czyli do kazdego komentarza moze byc n odpowiedzi m rzędu)

Oczywiście mam zrobioną paginację (limitowanie zapytania do bazy).

Lecz teraz pojawia sie problem, a mianowicie jeśli ktoś wybierze sobie drugą podstronę wówczas wynik zapytania może być nieoczekiwany tzn pobierze mi ileś tam kolejnych rekordów, lecz te rekordy nie będą miały np wszystkich dzieci danego rodzica lub na odwrót rodzice nie będą miały wszystkich dzieci bądź w ogóle, a sortowanie mam po id desc czyli od najnowszego do najstarszego Tutaj właśnie powstaje prawdziwy sajgon.

Macie jakieś pomysły, aby zrobić to dobrze? Tzn żeby pobierało zawsze dobre drzewko. Może istnieje zupełnie inny optymalny sposób na realizację tego.

Czekam na sugestie.
camikazee
Ja bym zrobił to tak, że pobierał daną ilość głównych komentarzy + ewentualnie po jednym podkomentarzy i zrobił opcję zobacz odpowiedzi wczytywane ajaxem. Kolejną opcją jest w głównym komentarzu licznik zliczajacy ilość podkomentarzy, w ten sposób będziesz wiedział ile drzewko ma "dzieciaków".
jarmiar
A od razu z mysqla za pomocą drzew depesza ?
Orzeszekk
ja bym to widzial tak


  1. pierwsza podstrona (5 komentarzy)
  2. + pierwszy rootID = 1 parent = 0 ID = 1
  3. + drugi rootID = 2 parent = 0 ID = 2
  4. + trzeci rootID = 3 parent=0 ID =3
  5. - odp: trzeci rootID = 3, parent = 3 ID=4
  6. - odp: trzeci rootID = 3, parent = 3 ID=5
  7. - odp: odp: trzeci rootID = 3, parent =5, ID =6
  8. + czwarty rootID = 4
  9. + piąty rootID =5
  10. - odp: piaty
  11. - odp: odp: piaty
  12. - odp: odp: odp: piaty
  13.  
  14. druga podstrona (5 komentarzy)
  15. + szosty rootID = 6
  16. + siodmy rootID = 7
  17. - odp: siodmy
  18. - odp: odp: siodmy
  19. + osmy rootID = 8
  20. + dziewiaty rootID = 9
  21. + dziesiaty rootID = 10

pobierasz piersza podstrone wraz z odpowiedziami (całą), lub druga podstrone (tez całą) i problemu nie ma.

tylko zeby to jakos szybko i efektywnie smigalo musialbys miec taka strukture w tabeli

ID autoincrement | parent ID | rootParent ID | tresc , itd..|

parent ID to bylo by ID posta na ktory ten post jest odpowiedzią, natomiast Root Parent ID byloby ID tego posta na samej górze ktory wlicza sie do tych pieciu na podstrone. Dzieki temu moglbys prostym selectem select * where rootParent>=pageSize*strona AND rootParent<= pageSize*strona+pageSize pobrac wszystkie posty ktorych potrzebujesz do zbudowania drzewa.

lepiej niech twoja struktura ma 2 pola wiecej, ale niech bedzie przejrzysta i logiczna, niz bawienie sie w oszczedzanie miejsca w bazie i stworzenie czegos na czym sie nie da pracowac bez bólu dupy
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.