Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] Zapytanie
Forum PHP.pl > Forum > PHP
styryl
Witam mam oto taki problem:

mam 2 tabele

1. Oceny

id ocena glosow what id_what

2. Filmy

id title tresc kat date stat dstat act opened id_user

Chce teraz wyciągnąć najwyżej ocenione filmy przy czym uwzględniając z tabeli filmy stat = 1 i dstat = 1

Ocena jest wyliczana tak:

$ocena_ = $ocena_ / $glosow_;
$ocena_ = round ($ocena_ , 1);

Czyli dziele sume ocen z kolumny oceny przez ilość oddanych głosów z kolumny glosow

Nie mam pomysłu jak to zrobić proszę o pomoc.

Pzdr
blooregard
Pokaż co do tej pory wymyśliłeś.
styryl
$q = "SELECT * FROM oceny WHERE what = 'filmy' ORDER BY ocena DESC LIMIT 10";

potem w pętli wyciągam z tablei filmy, dane ale to się mija z celem. Dlatego pisze tutaj o pomoc
djbarca
tzn zakladam ze jeden rekord w tabeli oceny jest dla jednego filmu to bylo by chyba tak:

  1. $rekord = mysql_query("SELECT f.title,o.ocena,o.glosow,(o.ocena/o.glosow) as wynik
  2. FROM filmy f LEFT JOIN oceny o ON o.id_what = f.id WHERE f.what='filmy' && f.stat='1' && f.dstat='1' ORDER BY wynik DESC LIMIT 10");


i teraz np wykorzystanie
  1. while ($re = mysql_fetch_array($rekord))
  2. {
  3. echo "Tytul filmu: {$re[0]} ma ocene: {$re[1]} i glosow {$re[2]} wynik = ".round($re[3],1)."<br/>";
  4. }
blawat
select (o.ocena/o.glosow) ocena_srednia, f.* from oceny o, filmy f where o.id_what=f.id and f.stat=1 and f.dstat=1 order by ocena_srednia desc

Cytat(djbarca @ 29.03.2010, 21:37:39 ) *
tzn zakladam ze jeden rekord w tabeli oceny jest dla jednego filmu to bylo by chyba tak:

  1. $rekord = mysql_query("SELECT f.title,o.ocena,o.glosow,(o.ocena/o.glosow) as wynik
  2. FROM filmy f LEFT JOIN oceny o ON o.id_what = f.id WHERE f.what='filmy' && f.stat='1' && f.dstat='1' ORDER BY wynik DESC LIMIT 10");


z jego struktury tabeli raczej bym wnioskowal ze tabela ocen odnosi sie ogolnie do ocen np: ocen ksiazek dlatego ma tam wstawiona kolumne "what"

w takim wypadku left join zle zadziala bo nie wszystkie oceny beda odnosily sie do filmow i wskocza do wynikow null'e
blawat
Cytat(djbarca @ 29.03.2010, 21:47:31 ) *
ogolnie to chyba to samo biggrin.gif


ogolnie to nie ... polecam doczytanie o rozniacach pomiedzy uzywaniem bezposredniej relacji tak jak podalem a uzyciem jej z joinm
djbarca
racja sprawdziłem. ale i w twoim i w moim przkladzie jesli nie będzie oceny to nie zobaczymy filmu

Cytat
select (o.ocena/o.glosow) ocena_srednia, f.* from oceny o, filmy f where o.id_what=f.id and f.stat=1 and f.dstat=1 order by ocena_srednia desc

nie uwzględniłeś && what='filmy'

byc moze chodzi o cos takiego:
  1. $rekord = mysql_query("SELECT f.title,o.ocena,o.glosow,(o.ocena/o.glosow) as wynik
  2. FROM filmy f LEFT JOIN oceny o ON o.id_what = f.id && o.what='filmy' where f.stat='1' && f.dstat='1' ORDER BY wynik DESC");
blawat
Cytat(djbarca @ 29.03.2010, 22:06:46 ) *
racja sprawdziłem. ale i w twoim i w moim przkladzie jesli nie będzie oceny to nie zobaczymy filmu


nie uwzględniłeś && what='filmy'


fakt przeoczenie z mojej strony (zaspany jestem winksmiley.jpg

Cytat(djbarca @ 29.03.2010, 22:06:46 ) *
byc moze chodzi o cos takiego:
  1. $rekord = mysql_query("SELECT f.title,o.ocena,o.glosow,(o.ocena/o.glosow) as wynik
  2. FROM filmy f LEFT JOIN oceny o ON o.id_what = f.id && o.what='filmy' where f.stat='1' && f.dstat='1' ORDER BY wynik DESC");


po co na sile pchasz sie w join'y trzeba je najpierw dobrze zrouzmiec bo Twoje zapytanie nie zadziala tak jak powinno :/

krotka tutka z left joina: left join

jesli moglo mi o cos wiecej chodzic to tylko o to:

  1. SELECT (o.ocena/o.glosow) ocena_srednia, f.* FROM oceny o, filmy f WHERE o.id_what=f.id AND f.stat=1 AND f.dstat=1 AND o.what='filmy' ORDER BY ocena_srednia DESC

djbarca
no ok. teraz już nie wiem biggrin.gif czy ja zle zrozumiałem . czy tak naprawdę ma być . możne to wina późnej pory. a co w wypadku gdy nie ma oceny? gdy dodany został nowy film, styryl stronnicuje to sobie na samym końcu chciałbym mieć te filmy bez komentarzy a Twoim zapytaniem pokażą się wszystkie z jakimś tam komentarzem. Ogólnie wiem jaka jest różnica w poszczególnych złączeniach albo lepiej wiem jaki efekt uzyskam stosując poszczególne złączenie. Jeśli się mylę to sry ...
blawat
Cytat(djbarca @ 29.03.2010, 21:48:31 ) *
no ok. teraz już nie wiem biggrin.gif czy ja zle zrozumiałem . czy tak naprawdę ma być . możne to wina późnej pory. a co w wypadku gdy nie ma oceny? gdy dodany został nowy film, styryl stronnicuje to sobie na samym końcu chciałbym mieć te filmy bez komentarzy a Twoim zapytaniem pokażą się wszystkie z jakimś tam komentarzem. Ogólnie wiem jaka jest różnica w poszczególnych złączeniach albo lepiej wiem jaki efekt uzyskam stosując poszczególne złączenie. Jeśli się mylę to sry ...


pytanie bylo o filmy z ocena

jesli by chcial wszytkie filmy bez wzgledu na to czy maja ocene czy nie to trzeba wtedy uzyc left joina przyczym kolejnosc tabel powinna byc odwrotna -> join dotyczyl by tabeli oceny a nie filmy tak czy siak jestes juz chyba bardzo zaspany winksmiley.jpg
djbarca
no trochę .. zmiana czasu daje się trochę we znaki ..

Cytat
Chce teraz wyciągnąć najwyżej ocenione filmy przy czym uwzględniając z tabeli filmy stat = 1 i dstat = 1


ogólnie masz racje , jakoś tak sobie na początku przyjąłem ze chce wszystkie filmy, to nawet, jakby chciał mieć zapytanie na wszystkie filmy to już jest zrobione...
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.