[SQL] zapytanie do 3 tabel
Bartek - 13-03-2006 11:26
[SQL] zapytanie do 3 tabel
Witam!
Nie moge sobie poradzic z nastepujacym problemem. Mam baze, a w niej m.in takie tabele:
stories * story_id int * title char(200)
story_rank * story_id int * user_id int * points smallint // w bazie zostaje zapisany tekst na ktory uzytkownik glosowal, jego identyfikator oraz liczba punktow. ma to zapobiec kilkukrotnemu glosowaniu
story_visits * story_id int * user_id int // po wejsciu na strone z tekstem zapisywany jest identyfikator uzytkownika tak aby licznik pokazywal ilosc rzeczywistych odwiedzin
Chcialbym zbudowac zapytanie (MySQL 4.1.18), ktorego rezultatem bylaby lista z nastepujacymi polami: 1 title 2 srednia ocena tekstu przez uzytkownikow na podstawie bazy story_rank 3 liczba uzytkownikow, ktorzy weszli na strone z tekstem
O ile zebranie pol 1 i 2 (przy uzyciu AVG i GROUP BY) daje pozadane efekty, to dodanie trzeciego pola przerasta juz moje sily. Mam nadzieje, ze jest to wykonalne:) Z gory dzieki za pomoc!
Pozdrawiam Bartek
Grzegorz Danowski - 13-03-2006 11:26
Użytkownik "Bartek" <none@none.us> napisał w wiadomości news:441304fa$0$1460$f69f905@mamut2.aster.pl... > Witam! > > Nie moge sobie poradzic z nastepujacym problemem. Mam baze, a w niej m.in > takie tabele: > > stories > * story_id int > * title char(200) > > story_rank > * story_id int > * user_id int > * points smallint > // w bazie zostaje zapisany tekst na ktory uzytkownik glosowal, jego > identyfikator oraz liczba punktow. ma to zapobiec kilkukrotnemu glosowaniu > > story_visits > * story_id int > * user_id int > // po wejsciu na strone z tekstem zapisywany jest identyfikator > uzytkownika tak aby licznik pokazywal ilosc rzeczywistych odwiedzin > > > Chcialbym zbudowac zapytanie (MySQL 4.1.18), ktorego rezultatem bylaby > lista z nastepujacymi polami: > 1 title > 2 srednia ocena tekstu przez uzytkownikow na podstawie bazy story_rank > 3 liczba uzytkownikow, ktorzy weszli na strone z tekstem >
Może w ten sposób:
Select S.title R.AvgPoints, V.VisitCount From stries As S Inner Join (Select story_id, Avg(Points) As AvgPoints From story_rank Group By story_id) As R On S.story_id = R.story_id Inner Join (Select story_id, Count(*) As VisitsCount From story_visits) As V On S.story_id = V.story_id
Jeśli to nie działa w MySQL, to możesz podzapytania przenieść do osobnych zapytań. Ewentualnie możesz spróbować z podzapytaniami skorelowanymi.
Pozdrawiam Grzegorz
Bartek - 13-03-2006 11:26
Dzieki Grzesiek, troche wygladzilem i dziala jak nalezy!
SELECT S.title, R.AvgPoints, V.VisitCount
FROM stories AS S
INNER JOIN ( SELECT story_id, AVG(points) AS AvgPoints FROM story_rank GROUP BY story_id ) AS R USING (story_id)
INNER JOIN ( SELECT story_id, COUNT(user_id) AS VisitCount FROM story_visits GROUP BY story_id ) AS V USING (story_id)
Pozdrawiam Bartek
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?=
Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?=
=?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
=?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?=
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
[Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?=
=?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
[newbie] MS SQL - praca =?ISO-8859-2?Q?jednocze=B6nie_na_2_?==?ISO-8859-2?Q?bazach_=28linkowanie_=3F=29?=
zanotowane.pldoc.pisz.plpdf.pisz.plmelooonka.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|