Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php/mysql] Wielopoziomowe komentarze, z odp do komentarzy, odp do odpowiedzi itd
piotrekkr
post
Post #1





Grupa: Zarejestrowani
Postów: 386
Pomógł: 25
Dołączył: 28.09.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
zimi
post
Post #2





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

Ostrzeżenie: (0%)
-----


najsensowniej chyba będzie Ciebie odesłać do: http://forum.php.pl/index.php?showtopic=35091
dużo i na temat...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 19:29