Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Licznik komentarzy (PHP + mysql), problem
kimu
post
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 25.06.2007

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


Witam. Chciałbym zrobić licznik komentarzy który wyświetlał by się obok każdego dodanego tekstu. Czyli
obok każdego tekstu pojawiała by się odpowiednia do danego tekstu.

Puki co wygląda to tak (KLIK)

Gdzie każde "0" powinno być odpowiednią wartością odpowiadającą liczbie komentarzy danego tekstu. Tak
jednak nie jest.

Skrypt PHP w pliku "teksty.php" to:

  1. <?php
  2. $conn = mysql_connect("xxx","xxx","xxx");
  3. mysql_select_db("teksty");
  4. ?>
  5.  
  6. <?php
  7. $sql = 'SELECT * FROM `katalog`; ';
  8. $sqla = "SET CHARSET latin2";
  9. mysql_query($sqla);
  10. $sql = 'SELECT * FROM `katalog`; ';
  11. $wykonaj = mysql_query($sql);
  12. $sql3 = mysql_query("SELECT COUNT(*) as il_komentarzy FROM kom WHERE tek='".$_GET['id']."'");
  13. $row = mysql_fetch_array($sql3);
  14.  
  15.  
  16. while($wiersz = mysql_fetch_assoc($wykonaj)) {
  17. echo '<table border="0" width="100%">'.'<tr>'.'<td bgcolor="#758588">'.'<font size="2">'.$wiersz['nazwa'].'</font>'.'</td>'.'</tr>'.'</table><hr color="#758588" size=1 /><a href="wpis.php?id='.$wiersz['id'].'"></a>';
  18.  
  19. $sql1 = "SELECT * FROM `tekst` WHERE kat = '".$wiersz['id']."' ORDER BY id";
  20. $wykonaj1 = mysql_query($sql1);
  21.  
  22. while($wiersz1 = mysql_fetch_assoc($wykonaj1)) {
  23. echo '<table border="0" width="100%">'.'<tr>'.'<td bgcolor="#C1C9C9">'.'<font size="2">'.[b]$row['il_komentarzy'][/b].'- <a href="strona-teksty.php?id='.$wiersz1['id'].'">'.$wiersz1['tytul'].' </a>'.'</font>'.'</td>'.'</tr>'.'</table>';
  24. }
  25. echo '<br>';
  26. }
  27. mysql_close($conn);
  28. ?>


$sql3 = mysql_query("SELECT COUNT(*) as il_komentarzy FROM kom WHERE tek='".$_GET['id']."'");
$row = mysql_fetch_array($sql3);

$row['il_komentarzy']


Gdzie część pogrubiona skryptu odpowiada za wyświetlane zera.

Baza danych wygląda następująco:

Teksty:
* katalog
* kom
- id, imie, tresc, tek (id jest pojedyncze dla jednego komentarza, tek odpowiada przynależności do danego tekstu).
* tekst
- id, tytul, tekst, kat (id jest pjedyncze dla jednego tekstu i odpowiada wartości tek w komentarzach).


Czy ktoś może wie co musze zrobić aby liczba komentarzy była wyświetlana poprawnie?

Ten post edytował kimu 25.06.2007, 21:39:24
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
DawidF
post
Post #2





Grupa: Zablokowani
Postów: 120
Pomógł: 2
Dołączył: 4.11.2004

Ostrzeżenie: (10%)
X----


A próbowałeś to samo zapytanie, tzn.

  1. SELECT COUNT(*) AS il_komentarzy FROM kom WHERE tek='".$_GET['id']."'");


przetestować w np. w PhpMyAdminie?

Jest to poza tym raczej mało skomplikowane zapytanie. Czemu wobec tego nie napisać po prostu:

  1. $sql3 = mysql_query("SELECT * FROM kom WHERE tek='".$_GET['id']."'");
  2. echo mysql_num_rows($sql3);


Tylko zaraz kombinować??

Pozdrawiam,
Go to the top of the page
+Quote Post
kimu
post
Post #3





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 25.06.2007

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


Teraz wygląda to tak:

  1. <?php
  2. $conn = mysql_connect("xxx","xxx","xxx");
  3. mysql_select_db("teksty");
  4.  
  5. $sql = 'SELECT * FROM `katalog`; ';
  6. $sqla = "SET CHARSET latin2";
  7. mysql_query($sqla);
  8. $sql = 'SELECT * FROM `katalog`; ';
  9. $wykonaj = mysql_query($sql);
  10. $sql3 = mysql_query("SELECT * FROM kom WHERE tek='".$_GET['id']."'");
  11.  
  12.  
  13. while($wiersz = mysql_fetch_assoc($wykonaj)) {
  14. echo '<table border="0" width="100%">'.'<tr>'.'<td bgcolor="#758588">'.'<font size="2">'.$wiersz['nazwa'].'</font>'.'</td>'.'</tr>'.'</table><hr color="#758588" size=1 /><a href="wpis.php?id='.$wiersz['id'].'"></a>';
  15.  
  16. $sql1 = "SELECT * FROM `tekst` WHERE kat = '".$wiersz['id']."' ORDER BY id";
  17. $wykonaj1 = mysql_query($sql1);
  18.  
  19. while($wiersz1 = mysql_fetch_assoc($wykonaj1)) {
  20. echo '<table border="0" width="100%">'.'<tr>'.'<td bgcolor="#C1C9C9">'.'<font size="2">'.mysql_num_rows($sql3).'- <a href="strona-teksty.php?id='.$wiersz1['id'].'">'.$wiersz1['tytul'].' </a>'.'</font>'.'</td>'.'</tr>'.'</table>';
  21. }
  22. }
  23. mysql_close($conn);
  24. ?>


I dalej pojawiają się zera. Moze problem tkwi w "tek" i "id" komentarzy i tekstów ?

Ten post edytował kimu 26.06.2007, 09:58:22
Go to the top of the page
+Quote Post
chlebik
post
Post #4





Grupa: Zarejestrowani
Postów: 113
Pomógł: 5
Dołączył: 12.09.2006
Skąd: Pruszków/Warszawa

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


U mnie zliczanie komentarzy wyglada nastepuajco:


  1. <?php
  2. $query = "SELECT * FROM komentarze WHERE id = '$tablica_z_wpisami2[1]'";
  3. $tablica_zliczanych_komentarzy = mysql_query($query, $link);
  4.  
  5. while($row = mysql_fetch_row($tablica_zliczanych_komentarzy)) 
  6. {
  7. $liczba_komentarzy++;
  8. }
  9. ?>



Po prostu pobieram juz komentarze zawczasu i sa one w tablicy, ktora szybko moge odczytac, a zliczanie ilosci tych komentarzy tym samym jest po prostu zliczaniem ilosci wierszy w tabeli. Nie jest to moze do konca efektywne rozwiazanie, ale dziala calkiem sprawnie - zycie nauczylo, ze operowanie na funkcjach MySQLa z definicji mi nie wychodzi, ale ja w koncu lama jestem smile.gif

Ten post edytował chlebik 26.06.2007, 10:24:00


--------------------
"Człowiek dążący do swego celu może być skuteczny tylko w przypadku, jeśli każdą minutę swego życia wykorzysta z maksymalną korzyścią dla osiągnięcia zaplanowanego celu. Jeśli stworzył dla siebie system kar i karze sam siebie za każdą zmarnowaną minutę. Człowiekowi w zupełności wystarczą 3-4 godziny snu, cały pozostały czas może być wykorzystany dla osiągnięcia upragnionego celu." -- Wiktor Suworow
Java devBlog
KulturalnyChlebik
Go to the top of the page
+Quote Post
Strzałek
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 384
Pomógł: 6
Dołączył: 11.09.2004
Skąd: Grodzisk Mazowiecki

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


Ja wtrącę swoje parę groszy.

Otóż takie liczenie komentarzy jest mało wydajne. Wyobraź sobie że na stronie głównej masz 10 newsów i do każdego wykonujesz zapytanie z COUNT'em żeby pokazać ile jest komentarzy. Masz 1 zapytanie + 10 + jeszcze jakieś inne. Nie fajnie, nie wspominając o tym że przy dużeeej ilości komentarzy COUNT nie jest błyskawicą winksmiley.jpg Zdecydowanie lepszym rozwiązaniem jest trzymanie w kolumnie z newsami czy czymś innym ilości komentarzy.

Przy dodaniu i usuwaniu komentarza zrobić UPDATE, żeby licznik się zgadzał i gra gitara winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
kimu
post
Post #6





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 25.06.2007

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


Teraz zrobiłem w ten sposób i dalej pokazują się zera :/

  1. <?php
  2. $conn = mysql_connect("xxx","xxx","xxx");
  3. mysql_select_db("teksty");
  4.  
  5. $sql = 'SELECT * FROM `katalog`; ';
  6. $sqla = "SET CHARSET latin2";
  7. mysql_query($sqla);
  8. $sql = 'SELECT * FROM `katalog`; ';
  9. $wykonaj = mysql_query($sql);
  10.  
  11. while($wiersz = mysql_fetch_assoc($wykonaj)) {
  12. echo '<table border="0" width="100%">'.'<tr>'.'<td bgcolor="#758588">'.'<font size="2">'.$wiersz['nazwa'].'</font>'.'</td>'.'</tr>'.'</table><hr color="#758588" size=1 /><a href="wpis.php?id='.$wiersz['id'].'"></a>';
  13.  
  14. $sql1 = "SELECT * FROM `tekst` WHERE kat = '".$wiersz['id']."' ORDER BY id";
  15. $wykonaj1 = mysql_query($sql1);
  16.  
  17. $sql3 = mysql_query("SELECT * FROM kom WHERE tek='".$wiersz['id']."'");
  18.  
  19. while($wiersz1 = mysql_fetch_assoc($wykonaj1)) {
  20. echo '<table border="0" width="100%">'.'<tr>'.'<td bgcolor="#C1C9C9" width="95%">'.'<font size="2">'.'- <a href="strona-teksty.php?id='.$wiersz1['id'].'">'.$wiersz1['tytul'].' </a>'.'</td>'.'<td align="center" bgcolor="#7C8F96">'.mysql_num_rows($sql3).'</font>'.'</td>'.'</tr>'.'</table>';
  21. }
  22. }
  23. mysql_close($conn);
  24. ?>


Ten post edytował kimu 26.06.2007, 14:32:07
Go to the top of the page
+Quote Post
abc667
post
Post #7





Grupa: Zarejestrowani
Postów: 229
Pomógł: 0
Dołączył: 29.05.2007

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


weź napisz dokładnie jak wygląda struktura twojej bazy
Go to the top of the page
+Quote Post
kimu
post
Post #8





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 25.06.2007

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


Jakbyś mógł odezwać się do mnie na gg (3164888) to podam ci dane do bazy i zobaczysz dokładnie jak ona wygląda ;-).

Problem już rozwiązałem. Dodałem nową kolumne w komentarzach liczącą ich liczbę. Teraz natomiast mam inne pytanie. Jakim skryptem moge obliczyć ilośc znaków znajduących się w danym wierszu np tabeli "tekst" ?
Go to the top of the page
+Quote Post
defrag
post
Post #9





Grupa: Zarejestrowani
Postów: 82
Pomógł: 3
Dołączył: 15.01.2007

Ostrzeżenie: (10%)
X----


Cytat(Strzałek @ 26.06.2007, 13:46:47 ) *
Ja wtrącę swoje parę groszy.

Otóż takie liczenie komentarzy jest mało wydajne. Wyobraź sobie że na stronie głównej masz 10 newsów i do każdego wykonujesz zapytanie z COUNT'em żeby pokazać ile jest komentarzy. Masz 1 zapytanie + 10 + jeszcze jakieś inne. Nie fajnie, nie wspominając o tym że przy dużeeej ilości komentarzy COUNT nie jest błyskawicą winksmiley.jpg Zdecydowanie lepszym rozwiązaniem jest trzymanie w kolumnie z newsami czy czymś innym ilości komentarzy.

Przy dodaniu i usuwaniu komentarza zrobić UPDATE, żeby licznik się zgadzał i gra gitara winksmiley.jpg

Zgadzam sie w 100% ze strzalkiem. Jesli masz mysql 5 to latwym rozwiazaniem jest ustawienie triggera ktory bedzie inkrementowal warotsc danego pola przy kazym insercie
  1. DELIMITER $$
  2.  
  3. CREATE TRIGGER groupDeleteHandler
  4. AFTER INSERT ON groups
  5. FOR EACH ROW BEGIN UPDATE group_categories SET group_count = group_count + 1 WHERE id = OLD.category_id;
  6. END;
  7.  
  8. $$
Go to the top of the page
+Quote Post
cicik
post
Post #10





Grupa: Zarejestrowani
Postów: 219
Pomógł: 5
Dołączył: 18.07.2006
Skąd: Piekary Śląskie

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


Cytat(defrag @ 26.06.2007, 17:32:46 ) *
Zgadzam sie w 100% ze strzalkiem. Jesli masz mysql 5 to latwym rozwiazaniem jest ustawienie triggera ktory bedzie inkrementowal warotsc danego pola przy kazym insercie


Tylko jeszcze znajdź hosting, na którym admin da ci uprawnienia do tworzenia triggerów.
Mam nadzieję, że zrobią tak, żeby do ich tworzenia nie trzeba było być superuserem.


--------------------
CMS dla Twojej firmy
Wojciech Małota
Go to the top of the page
+Quote Post
defrag
post
Post #11





Grupa: Zarejestrowani
Postów: 82
Pomógł: 3
Dołączył: 15.01.2007

Ostrzeżenie: (10%)
X----


Cytat(cicik @ 26.06.2007, 19:01:21 ) *
Tylko jeszcze znajdź hosting, na którym admin da ci uprawnienia do tworzenia triggerów.
Mam nadzieję, że zrobią tak, żeby do ich tworzenia nie trzeba było być superuserem.


No masz racje z mysql 5 z triggerami w polsce sie jeszcze nie spotkalem, jednak mialem okazje pracowac na hostach z niemiec, ktore udostepnialy ten "ficzer":) Tak to juz jest z MySQL'em.
Go to the top of the page
+Quote Post
kimu
post
Post #12





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 25.06.2007

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


A czy ktoś moze zna odpowiedź na moje wcześniejsze pytanie ?
Go to the top of the page
+Quote Post
Norbas
post
Post #13





Grupa: Zarejestrowani
Postów: 100
Pomógł: 1
Dołączył: 6.02.2006

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


Zastosuj funkcję CHAR_LENGTH


--------------------
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: 20.08.2025 - 09:13