Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] Zapytanie
styryl
post
Post #1





Grupa: Zarejestrowani
Postów: 223
Pomógł: 27
Dołączył: 16.04.2008
Skąd: Bakutilu

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


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
Go to the top of the page
+Quote Post
blooregard
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Pokaż co do tej pory wymyśliłeś.
Go to the top of the page
+Quote Post
styryl
post
Post #3





Grupa: Zarejestrowani
Postów: 223
Pomógł: 27
Dołączył: 16.04.2008
Skąd: Bakutilu

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


$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
Go to the top of the page
+Quote Post
djbarca
post
Post #4





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

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


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. }


Ten post edytował djbarca 29.03.2010, 21:38:14
Go to the top of the page
+Quote Post
blawat
post
Post #5





Grupa: Zarejestrowani
Postów: 31
Pomógł: 1
Dołączył: 17.03.2006

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


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

Ten post edytował blawat 29.03.2010, 21:48:08
Go to the top of the page
+Quote Post
blawat
post
Post #6





Grupa: Zarejestrowani
Postów: 31
Pomógł: 1
Dołączył: 17.03.2006

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


Cytat(djbarca @ 29.03.2010, 21:47:31 ) *
ogolnie to chyba to samo (IMG:style_emoticons/default/biggrin.gif)


ogolnie to nie ... polecam doczytanie o rozniacach pomiedzy uzywaniem bezposredniej relacji tak jak podalem a uzyciem jej z joinm
Go to the top of the page
+Quote Post
djbarca
post
Post #7





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

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


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");


Ten post edytował djbarca 29.03.2010, 22:13:38
Go to the top of the page
+Quote Post
blawat
post
Post #8





Grupa: Zarejestrowani
Postów: 31
Pomógł: 1
Dołączył: 17.03.2006

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


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 (IMG:style_emoticons/default/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

Go to the top of the page
+Quote Post
djbarca
post
Post #9





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

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


no ok. teraz już nie wiem (IMG:style_emoticons/default/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 ...
Go to the top of the page
+Quote Post
blawat
post
Post #10





Grupa: Zarejestrowani
Postów: 31
Pomógł: 1
Dołączył: 17.03.2006

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


Cytat(djbarca @ 29.03.2010, 21:48:31 ) *
no ok. teraz już nie wiem (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
djbarca
post
Post #11





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

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


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...

Ten post edytował djbarca 29.03.2010, 23:07:56
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 00:34