Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/mysql] Wielopoziomowe komentarze
Forum PHP.pl > Forum > PHP
piotrekkr
Witam chcialbym zrobic sobie system komentarzy do zdjec. Wiem jak zrobic prosty system to nie jest trudne tylko zastanawia mnie jak zrobic system komentarzy "pietrowy" tzn cos takiego:

Kod
komentarz 1
   odp do komentarza
      odp do odpowiedzi do  komentarza
kometarz 2
   odp do komentarza 2
   odp 2 do kometarza 2

...........
itd


czyli cos ala drzewko. Nie wiem jak zbudowac baze danych zeby ladnie to dzialalo. Tzn wiem jak to zrobic najprostszym sposobem ale to dosc mocno mogloby obciazyc baze danych. Taki obciazajacy sposob bylby np taki:

Mam tabele ze zdjeciami:
  1. CREATE TABLE images (
  2. image_id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
  3. image_name VARCHAR(255) NOT NULL,
  4.  
  5. )
  6.  
  7. CREATE TABLE comments (
  8. comment_id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
  9. image_id INT UNSIGNED NOT NULL,
  10. reply_to INT UNSIGNED NOT NULL DEFAULT 0,
  11. content TEXT NOT NULL,
  12. add_date INT(11) NOT NULL
  13. )


i teraz jak to bym tak wyswietlal:

zapytaniem bym pobieral powiedzmy 10 glownych komentarzy:
  1. <?php
  2. function GetChilds(&$db, $parent_id, $actual_level){
  3. $query = "SELECT * FROM comments WHERE reply_to=$parent_id ORDER BY add_date ASC";
  4. $result = $db->Execute($query);
  5. while($row = $result->FetchRow($result)){
  6. echo '<div style="margin-left:'.(($actual_level + 1) * 10 ).'px;">'.$row['content'].'</div>';
  7. GetChilds($db, $row['comment_id'], $actual_level +1);
  8. }
  9. }
  10.  
  11. $db = &$this->GetDB();
  12. $query = "SELECT * FROM comments WHERE image_id=123 ORDER BY add_date DESC LIMIT 10";
  13. $result = $db->Execute($query);
  14. while($row = $result->FetchRow($result)){
  15. echo '<div style="margin-left:0px;">'.$row['content'].'</div>';
  16. GetChilds($db, $row['comment_id'], 0);
  17. }
  18. ?>


tyle ze ten sposob nie jest zbyt wydajny bo generuje duza ilosc zapytan do bazy danych :/ ma ktos jakis lepszy pomysl?? smile.gif
zimi
najsensowniej chyba będzie Ciebie odesłać do: http://forum.php.pl/index.php?showtopic=35091
dużo i na temat...
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.