Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php, mySQL] skrypt oceny - jak wyciągnąć z niego tylko średnią?
Forum PHP.pl > Forum > PHP
cafepl_com
Witam! Mam bardzo dobry skrypt oceny w PHP z użyciem MySQL-a. Liczy on średnią i... właśnie o tę średnią chodzi... jak wyciągnąć z każdej gry średnią? Tzn. że mamy np. w pliku gra.php?id=9898989 średnią ocen: 6. i chciałbym żeby na stronie głównej pisało że gra wyścigi ma średnią 6 itp. nie wiem jak to wyciągnąć z tego kodu...
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2. "http://www.w3.org/TR/html4/loose.dtd">
  3. <html><head>
  4. <meta http-equiv="Content-type" content="text/html; charset=windows-1250">
  5. <style type="text/css">
  6. body {
  7. background: #fff;
  8. }
  9. </style>
  10. <?php
  11. $id = $_GET['id'];
  12. $ocena = $_POST['ocena'];
  13.  
  14. if(empty($id))
  15. {
  16. echo "NIE PODALES WARTOSCI ZMIENNEJ ID!!";
  17. } else {
  18.  
  19.  
  20. include("cofing_sql.php");
  21.  
  22. $dni = "1"; // jak dlugo ma trzmac sie blokada, o - blokada wylaczona
  23.  
  24. mysql_connect("$host","$user","$pass");
  25. mysql_select_db("$baza");
  26.  
  27. $data=date("d.m.Y");
  28. $rt=mysql_query("DELETE FROM blok_ip WHERE wygasa='$data' AND ids='$id'");
  29.  
  30.  
  31. $ip=$_SERVER[REMOTE_ADDR];
  32. $pytaniea="SELECT * FROM blok_ip WHERE ip='$ip' AND ids='$id'";
  33. $wykonaniea=mysql_query ($pytaniea);
  34. $ip_jest=mysql_num_rows($wykonaniea);
  35.  
  36. if($ip_jest=="0")
  37. {
  38. if(!$ocena)
  39. { } else {
  40. $plusdata=date("d.m.Y",strtotime("+$dni days",time()));
  41.  
  42.  
  43. $zapytanie = "INSERT INTO ocena SET ocena='$ocena', ids='$id'";
  44. $wykonaj = mysql_query($zapytanie);
  45.  
  46. $zapytaniedwa = "INSERT INTO blok_ip SET ip='$ip', wygasa='$plusdata', ids='$id'";
  47. $wykonajdwa = mysql_query($zapytaniedwa);
  48. }
  49. }
  50.  
  51. $pytanie="SELECT * FROM ocena WHERE ids='$id'";
  52. $wykonanie=mysql_query ($pytanie);
  53. $ile=mysql_num_rows($wykonanie);
  54.  
  55.  
  56.  
  57. $suma="0";
  58. while($xy=mysql_fetch_array($wykonanie)) {
  59. $suma=$suma+$xy[ocena];
  60. }
  61.  
  62. if($ile>0)
  63. {
  64. $sr=$suma/$ile;
  65. $srednia=round($sr, 2);
  66. } else {
  67. $srednia="0";
  68. }
  69.  
  70. if(!$ocena)
  71. {
  72. echo "<center><font color="green" size="2" face="Arial"><b>Oceń tę grę:</font><br><br> ";
  73. }
  74.  
  75. if($ip_jest=="0")
  76. {
  77. if(!$ocena)
  78. {
  79. echo "<form action='' method="post">
  80. <input type="hidden" name="id" value="$id">
  81. <input type="submit" name="ocena" value="1">
  82. <input type="submit" name="ocena" value="2">
  83. <input type="submit" name="ocena" value="3">
  84. <input type="submit" name="ocena" value="4">
  85. <input type="submit" name="ocena" value="5">
  86. <input type="submit" name="ocena" value="6">
  87. <input type="submit" name="ocena" value="7">
  88. <input type="submit" name="ocena" value="8">
  89. <input type="submit" name="ocena" value="9">
  90. <input type="submit" name="ocena" value="10">
  91. </from>";
  92. } else {
  93. echo "<center><font color="green" size="2" face="Arial"><b>Twoja ocena została przyjęta...</b>";
  94. if($dni>0)
  95. {
  96. echo "<br><b><font color="red">Średnia głosów:</b> $srednia</b>";
  97. } else {
  98. echo "<form action='' method="post">
  99. <input type="hidden" name="id" value="$id">
  100. <input type="submit" name="ocena" value="1">
  101. <input type="submit" name="ocena" value="2">
  102. <input type="submit" name="ocena" value="3">
  103. <input type="submit" name="ocena" value="4">
  104. <input type="submit" name="ocena" value="5">
  105. <input type="submit" name="ocena" value="6">
  106. <input type="submit" name="ocena" value="7">
  107. <input type="submit" name="ocena" value="8">
  108. <input type="submit" name="ocena" value="9">
  109. <input type="submit" name="ocena" value="10">
  110. </from>";
  111. }
  112. }
  113. } else {
  114. echo "<font color="red"><br><B>Oddałeś już głos.</b>";
  115. }
  116. }
  117. ?>
Vasari
Jeżeli dobrze rozumiem twój problem to spróbuj czegoś podobnego do tego:
  1. SELECT id, avg(ocena) FROM ocena GROUP BY id


Zwróci średnią wartość ocen dla każdego id winksmiley.jpg
cafepl_com
no dobrze a jak wyciągnąc tym sposobem średnią ocen np.l z id 999934 ?
misiek172
nie kumam... że średnia zawartości ID ? tych liczb 999934 questionmark.gif
cafepl_com
nie... kazda z gier na mojej stronie ma ID. np. gra LOL ma ID=99934 ludzie oceniają tę grę i wyciągnięta jest z tych ocen średnia. Tę liczbę - tę średnią -chciałbym żeby była wyświetlana na stronie głównej... tak jak ma np. maxior.pl na sttronie głownej... ze gra czy filmik, dodal: blabla ocena: 9,6 np. i ja chciałbym żeby była napisana średnia na stronie głownej.
misiek172
no to przecierz @Vasari podał ci rozwiązanie problemu

Edit:

a wiem o co ci chodziło... musisz dodać na końcu zamiast GROUP BY id dać WHERE id='i tu numer id'

Przykładowo:

  1. <?php
  2. $id=9994;
  3. $zap = "SELECT avg(ocena) FROM `tabelka` WHERE id='".$id."'";
  4. $wyk = mysql_query($zap);
  5. $row = mysql_fetch_row($wyk);
  6. echo "Średnia tejże pracy to: ".$row[0];
  7. ?>
cafepl_com
nie trudżcie się! ten skrypt jest do... nie będę się wyrazal ;] Macie jakieś inny skryoty oceny (sprawdzone dzialajace na MySQL-u ?)
misiek172
takie skrypty według mnie powinno sobie samemu pisać, wtedy można swobodnie sobie srotać, wyświetlać, dodać, edytować i wiele innych. A skrypt do ocen nie jest ani trudny ani duży.
pbnan
Hmmm, co do ocen: ja robię kolumny marks_count oraz marks, gdzie marks_count jest liczbą ocen, a marks to suma ocen. I później już w zapytaniu łatwo jest obliczyć średnią arytmetyczną (tak, w zapytaniu MySQL, testowałem smile.gif). Tak samo łatwo jest wpisać, tylko chyba trzeba dwóch zapytań użyć przy wprowadzaniu nowego rekordu, ale mniejsza o to smile.gif
misiek172
ale po co liczba ocen ludzie... myślcie

sam string jest tablicą znaków...
wystarczy polecenie strlen i mamy liczbe znaków w stringu, patrz liczbe ocen.

strlen();
pbnan
Ehe, tylko po co tracić miejsce w bazie na text, jak można kilka bajtów na jeden mały integer? //pardon, dwa
Aha, baza jest szybsza od php dry.gif
misiek172
a czy ja mówie o typie TEXT? A może tak VARCHAR? A jak się aż tak lubi ten INT to niech sie ma w INT, ponieważ strlen działa równierz przy formacie liczb.

zrób sobie plik testowy:

  1. <?php
  2. $zmienna = 123456; // jako liczba
  3. echo strlen($zmienna); // wyświetli 6 !!!!
  4. ?>
pbnan
biggrin.gif
Tylko że VARCHAR ma ograniczenie maks. do 255 znaków... Wrzuć tam 666 ocen (Twoim sposobem), życzę powodzenia ;-)
Cytat
zrób sobie plik testowy:

Spokojna głowa, znam PHP wystarczająco, by podstawy rozumieć poprawnie ;-)
cafepl_com
już poradziłem sobie z tym skryptem. Zrobiłem że oceny są zapisywane do bazy danych i teraz śmiało mogę sobie wyciągnąć średnią np. ze strony głównej.. biggrin.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.