Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> statystyki newsow, zliczanie newsow dla danego usera
batat
post 23.06.2004, 12:06:13
Post #1





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 8.03.2004
Skąd: Stalowa Wola

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


Mam maly problem przy swoich statystykach newsowych. chce, zeby pokazywalo ile kazdy user ma newsow. udalo mi sie stworzyc cos takiego:

  1. <?php
  2. mysql_connect (&#092;"127.0.0.1\",\"root\",\"krasnal\");
  3.  
  4. $zap = &#092;"SELECT * FROM news\";
  5. $wyk = mysql_query ($zap);
  6. while($wiersz=mysql_fetch_array ($wyk)) {
  7. $ilosc = &#092;"SELECT COUNT(*) FROM news WHERE autor='\".$wiersz['user'].\"'\";
  8. $newsow = mysql_query($ilosc) or die(mysql_error());
  9. $iloscnewsow = mysql_num_rows($newsow);}
  10.  
  11. $w = mysql_query (&#092;"SELECT * FROM users ORDER BY uid\");
  12. echo &#092;"<table width=500 align=center bgcolor=black cellspacing=0 cellpadding=2>\";
  13. while($wiersz=mysql_fetch_array ($w)) 
  14. {echo &#092;"<tr bgcolor=#400000><td>\".$wiersz['user'].\"</td><td>\".$iloscnewsow.\"</td></tr>\";}
  15. echo &#092;"</table>\";
  16. ?>


to mi wypisuje liste userow, ale w miejscu gdzie ma byc liczba newsow zawsze jest 1. jak ktos moze niech pomoze, bo mi jakos nic nie przychodzi do glowy smile.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Bartech
post 23.06.2004, 17:54:52
Post #2





Grupa: Zarejestrowani
Postów: 70
Pomógł: 0
Dołączył: 29.08.2003
Skąd: Poznań

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


Twój błąd polega na tym że dokonałeś dwukrotnego podliczenia odpowiedzi z MySQL.
1. Poprzez użycie zapytania
"SELECT COUNT(*) FROM news WHERE autor='".$wiersz['user']."
które w MySQL zwraca wynik w postaci jednego wiersza (rekordu) z liczbą postów od tego użytkownika.
2. Poprzez użycie funkicji
mysql_num_rows($newsow);
dokonałeś podliczenia wszystkich wyników (wierszy - rekordów) zwróconych przez MySQL, dlatego logicze jest że otrzymałeś "1", ponieważ - patrz punkt 1.

Proponuję wykonać to w ten sposób:
  1. <?php
  2. mysql_connect (&#092;"127.0.0.1\",\"root\",\"krasnal\");
  3.  
  4. $zap = &#092;"SELECT * FROM news\";
  5. $wyk = mysql_query ($zap);
  6. while($wiersz=mysql_fetch_array ($wyk)) {
  7. $ilosc = &#092;"SELECT * FROM news WHERE autor='\".$wiersz['user'].\"'\";
  8. $newsow = mysql_query($ilosc) or die(mysql_error());
  9. $iloscnewsow = mysql_num_rows($newsow);}
  10.  
  11. $w = mysql_query (&#092;"SELECT * FROM users ORDER BY uid\");
  12. echo &#092;"<table width=500 align=center bgcolor=black cellspacing=0 cellpadding=2>\";
  13. while($wiersz=mysql_fetch_array ($w)) 
  14. {echo &#092;"<tr bgcolor=#400000><td>\".$wiersz['user'].\"</td><td>\".$iloscnewsow.\"</td></tr>\";}
  15. echo &#092;"</table>\";    
  16. ?>


Zmiany objęły zapytanie w 9 lini kodu, usunąłem funkcję COUNT...

Ten post edytował Bartech 23.06.2004, 18:00:24


--------------------
www.szymaszkiewicz.com
Go to the top of the page
+Quote Post
batat
post 23.06.2004, 19:16:49
Post #3





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 8.03.2004
Skąd: Stalowa Wola

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


hmmm, chyba nie w tym problem bo teraz mi wyswietla wsedzie zero :/ ma ktos jakis inny pomysl na rozwiazanie tego problemu questionmark.gif
Go to the top of the page
+Quote Post
Jojo
post 23.06.2004, 19:28:29
Post #4





Grupa: Zarejestrowani
Postów: 405
Pomógł: 1
Dołączył: 19.09.2003
Skąd: Lublin

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


batat: O rany! Wyobrażasz sobie jak długo wykonywałby się Twój kod gdybyś miał tylu użytkowników co ma to forum? smile.gif
Zastanów się nad użyciem takiej konstrukcji:
  1. SELECT autor, COUNT(*) FROM news GROUP BY autor

Przeanalizuj wyniki jakie daje to zapytanie i zmień swój kod, bo jest maksymalnie nieoptymalny smile.gif

Ten post edytował Jojo 23.06.2004, 19:28:54


--------------------
Rozwój cywilizacji informatycznej to wyścig między programistami, którzy wytwarzają coraz łatwiejsze
programy użytkowe dla idiotów, a światem produkującym coraz lepszych gatunkowo idiotów.

Blog: Małolepszy.info
Go to the top of the page
+Quote Post
Bartech
post 23.06.2004, 19:41:54
Post #5





Grupa: Zarejestrowani
Postów: 70
Pomógł: 0
Dołączył: 29.08.2003
Skąd: Poznań

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


JOJO, świetna sugestia, wyniki tego zapytania, wsadzone w petle WHILE dadzą kompletny wypis użytkowników i ilości ich postów/newsów...

BATAT jojo ma rację... :roll2:


--------------------
www.szymaszkiewicz.com
Go to the top of the page
+Quote Post
batat
post 23.06.2004, 21:35:04
Post #6





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 8.03.2004
Skąd: Stalowa Wola

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


moze ma racje, ale ja z tego nie potrafie nic wyciagnac. po pierwsz to pierwszy raz spotkalem sie z funkcja GROUP BY, po drugie to nie umiem zastosowac tych wskazowek JOJO a po trzecie moj kod jest chyba dobry ( nie bedzie chodzil dlugo bo w newsach bedzie tylko kilku userow ), tylko nie pobiera roznej liczby newsow userow , tzn. wyswietla ilosc newsow dla 1 usera i potem powtarza. jak w warunku WHERE wpisze zamiast ".$wiersz['user']." np. ZIOMEK to wyswietla mi ile newsow ma ziomek, ale ja chce zeby to bylo zautomatyzowane, nie chce tego robic recznie...a jezeli uwazacie ze kod jojo jest lepszy to prosilbym o wiekszy fragment kodu. moze jestem glupi i uciazliwy, ale mnie cos juz trafia z tymi statystykami sad.gif ... help ...

Ten post edytował batat 23.06.2004, 21:36:27
Go to the top of the page
+Quote Post
Jojo
post 23.06.2004, 21:52:29
Post #7





Grupa: Zarejestrowani
Postów: 405
Pomógł: 1
Dołączył: 19.09.2003
Skąd: Lublin

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


Wykonaj sobie taki kod:
  1. <?php
  2. $resResult = mysql_query( &#092;"SELECT autor, COUNT(*) AS ilosc FROM news GROUP BY autor\" );
  3. while( $arrRow = mysql_fetch_array( $resResult ) )
  4. {
  5.     echo $arrRow[ 'autor' ] . ' | ' . $arrRow[ 'ilosc' ] . '<br />';
  6. }
  7. ?>

i zobacz co się wyświetli. Myślę, że to powinno rozwiać Twoje wątpliwości.

PS. Powyższy kod pisałem z głowy, więc mogą być jakieś niedociągnięcia.

Ten post edytował Jojo 23.06.2004, 21:52:44


--------------------
Rozwój cywilizacji informatycznej to wyścig między programistami, którzy wytwarzają coraz łatwiejsze
programy użytkowe dla idiotów, a światem produkującym coraz lepszych gatunkowo idiotów.

Blog: Małolepszy.info
Go to the top of the page
+Quote Post
batat
post 24.06.2004, 08:30:32
Post #8





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 8.03.2004
Skąd: Stalowa Wola

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


wielkie dzieki jojo smile.gif teraz juz wszystko chodzi :] guitar.gif
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 Wersja Lo-Fi Aktualny czas: 19.07.2025 - 18:19