Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: statystyki newsow
Forum PHP.pl > Forum > Przedszkole
batat
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
Bartech
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...
batat
hmmm, chyba nie w tym problem bo teraz mi wyswietla wsedzie zero :/ ma ktos jakis inny pomysl na rozwiazanie tego problemu questionmark.gif
Jojo
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
Bartech
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:
batat
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 ...
Jojo
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.
batat
wielkie dzieki jojo smile.gif teraz juz wszystko chodzi :] guitar.gif
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.