Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL] Liczenie sredniej z tabeli
Forum PHP.pl > Forum > Przedszkole
woyo-sensei
Witam.

Mam taki problem.

Otoz mam formularz dodawania komentarzy oparty na bazach danych. W tym formularzu jest oczywiscie miejsce na komentarz oraz wybor oceny od "---" (brak oceny) do 10 (skala od 1 do 10). Moze przedstawie mniej wiecej jak to wyglada:

  1. <?php
  2. <form method="POST" name="komentarze_form">
  3. Twoj nick: '.$_SESSION["USER_ID"].'<br>
  4. Tresc komentarza:<br>
  5. <textarea name="tresc" id="tresc" cols="30" rows="6"></textarea>
  6. <br>
  7. Twoja ocena:<br>
  8. <select size=1 class="ocena" name="ocena">
  9. <option value="---" selected>---</option>
  10. <option value="1">1</option>
  11. <option value="2">2</option>
  12. <option value="3">3</option>
  13. <option value="4">4</option>
  14. <option value="5">5</option>
  15. <option value="6">6</option>
  16. <option value="7">7</option>
  17. <option value="8">8</option>
  18. <option value="9">9</option>
  19. <option value="10">10</option>
  20. </select>
  21.  <input class="koment" type="submit" value="Dodaj komentarz">
  22.  <input class="koment" type="reset" value="Wyczysc">
  23.  <input type="hidden" name="add_kom" value="yes">
  24.  </form>
  25. ';
  26.  
  27. mysql_connect ('localhost', 'user', 'pass') or die('Blad polaczania z baza danych');
  28. mysql_select_db ("baza") or die ('Blad polaczenia z baza danych');
  29.  
  30. if($_POST['add_kom'] == 'yes')
  31. {
  32.  $login = $_SESSION["USER_ID"];
  33.  $tresc = $_POST['tresc'];
  34.  $ocena = $_POST['ocena'];
  35.  $add_koment = mysql_query("INSERT INTO `tut_mod` VALUES ('', '$login', '$tresc', '$ocena', now() )");
  36. }
  37. else
  38. {
  39.  echo 'Cos poszlo nie tak...';
  40. }
  41. ?>



Chodzi o to zeby z tabeli "ocena" wyliczyc srednia miedzy 1 a 10 i wyswietlic wynik. Poki co napisalem cos takiego:

  1. <?php
  2. mysql_connect ('localhost', 'user', 'pass') or die('Blad polaczania z baza danych');
  3. mysql_select_db ("baza") or die ('Blad polaczenia z baza danych');
  4. $db = mysql_query("SELECT * FROM `tut_mod` ORDER BY `data` DESC");
  5. $srednia = mysql_query("SELECT AVG(`ocena`) FROM `tut_mod` WHERE `ocena` BETWEEN 1 AND 10");
  6. echo '<h3>Srednia ocen: '.$srednia.'</h3><br>';
  7. while($rek = mysql_fetch_array($db))
  8. {
  9. $wyswietl .= '
  10. <table width="400" border="1">
  11. <tr>
  12. <td width="200">Nick: <b><tt><font color="blue">'.$rek[1].'</font></tt></b></td><br>
  13. <td>Data: <samp>'.$rek[4].'</samp></td><br>
  14. </tr>
  15. <tr>
  16. <td colspan="2">Tresc komentarza: <br>
  17. '.$rek[2].'</td><br>
  18. </tr>
  19. <tr>
  20. <td colspan="2">Ocena: '.$rek[3].'</td>
  21. </tr>
  22. </table>
  23. <br>';
  24. }
  25. echo $wyswietl;
  26. ?>



Wszystko dziala procz liczenia sredniej. Nie wiem czy wiadomo o co mi chodzi. Uzytkownicy podczas dodawania komentarza maja mozliwosc dodania oceny (lub nie). I teraz chodzi mi o to, zeby z tych wszystkich ocen wyliczyc srednia. Z tego co wiem zapytanie powinno wygladac tak:

  1. <?php
  2. $srednia = mysql_query("SELECT AVG(`ocena`) FROM `tut_mod` WHERE `ocena` BETWEEN 1 AND 10");
  3. ?>


niestety zamiast sredniej otrzymuje komunikat

Kod
Srednia ocen: Resource id #11


Czy ktos moglby mi pomoc w rozwiazaniu tego problemu? Bede bardzo wdzieczny.

Pozdrawiam.
nospor
Cytat
niestety zamiast sredniej otrzymuje komunikat
Bo mysql_query() zwraca wlasnie to. zajrzyj teraz do manuala i zobacz jak obsluc to, co zwraca mysql_query()

hint: mysql_fetch_array()
kefirek
Zobacz tak

  1. <?php
  2. mysql_connect ('localhost', 'user', 'pass') or die('Blad polaczania z baza danych');
  3. mysql_select_db ("baza") or die ('Blad polaczenia z baza danych');
  4. $db = mysql_query("SELECT * FROM `tut_mod` ORDER BY `data` DESC");
  5.  
  6. $srednia = mysql_query("SELECT AVG(`ocena`) AS srednia FROM `tut_mod` WHERE `ocena` BETWEEN 1 AND 10");
  7. $rek = mysql_fetch_array($db);
  8. echo "<h3>Srednia ocen: ".$rek['srednia']."</h3><br>";
  9.  
  10.  
  11. $wyswietl .= "
  12. <table width='400' border='1'>
  13. <tr>
  14. <td width='200'>Nick: <b><tt><font color='blue'>".$rek['pole']."</font></tt></b></td><br>
  15. <td>Data: <samp>".$rek['pole']."</samp></td><br>
  16. </tr>
  17. <tr>
  18. <td colspan='2'>Tresc komentarza: <br>
  19. ".$rek['pole']."</td><br>
  20. </tr>
  21. <tr>
  22. <td colspan="2">Ocena: ".$rek['pole']."</td>
  23. </tr>
  24. </table>
  25. <br>";
  26.  
  27. echo $wyswietl;
  28. ?>


Wpisz tylko nazwy pol z bazy danych tam gdzie masz ".$rek['pole']."
woyo-sensei
Zrobilem to w ten sposob:

  1. <?php
  2. $srednia = mysql_query("SELECT AVG(`ocena`) AS srednia FROM `tut_mod` WHERE `ocena` BETWEEN 1 AND 10");
  3. $licz = mysql_fetch_array($srednia);
  4. echo '<h3>Srednia ocen: '.$licz['srednia'].'</h3><br>';
  5. ?>


i dziala tylko jako wynik otrzymuje liczbe z 4 miejscami po przecinku. Zdecydowanie wystarcza dwa smile.gif Czy jest jakis sposob aby ograniczyc ilosc wyswietlanych liczb po przecinku?
nospor
@kefirek poraz kolejny w tym temacie wcinasz sie z gotowcem, gdy podany zostal link do manuala, ktory dobrze wszystko wyjasnia. Jeszcze raz i +10% smile.gif

edit down:
Cytat
@nospor, po co te nerwy? Kolega chcial tylko pomoc
Wcinanie sie z gotowcami, gdy wszystko podane jest w linku traktowane jest jak nabijanie postow. Notabene podał identyczny kod co byl w linku
woyo-sensei
@nospor, po co te nerwy? Kolega chcial tylko pomoc smile.gif

A co do tematu, to zastosowalem sie do manuala i wyszlo mi cos takiego:

  1. <?php
  2. $licz = mysql_fetch_array($srednia);
  3. $licz = number_format($licz['srednia'], 2);
  4. echo '<h3>Srednia ocen: '.$licz['srednia'].'</h3><br>';
  5. ?>



Teoretycznie powinno mi ograniczyc moj wynik do dwoch miejsc po przecinku, tymczasem zamiast tego, obcina calkowicie dziesietne i zaokragla do calkowitych w dol, przykladowo wynik wychodzil 6.5 a zaokraglalo do 6.

Wiem, ze podsuwanie gotowcow nie jest tu mile widziane cool.gif ale jakas drobna pomoc by sie przydala smile.gif
piotrooo89
round myślę że to powinno Ci pomóc.
woyo-sensei
Dziekuje, dziala jak nalezy. Moze komus sie przyda rozwiazanie.

Zastapilem wczesniejsze 3 linijki

  1. <?php
  2. $licz = mysql_fetch_array($srednia);
  3. $licz = number_format($licz['srednia'], 2);
  4. echo '<h3>Srednia ocen: '.$licz['srednia'].'</h3><br>';
  5. ?>



tym:

  1. <?php
  2. $licz = mysql_fetch_array($srednia);
  3. $licz = round($licz['srednia'], 2);
  4. echo '<h3>Srednia ocen: '.$licz.'</h3><br>';
  5. ?>



Mam nadzieje, ze komus sie przyda. Dziekuje i pozdrawiam smile.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.