ďťż
 
=?iso-8859-2?q?SQL:_left_join:_dublowanie_wynik=F3w?= ďťż
 
=?iso-8859-2?q?SQL:_left_join:_dublowanie_wynik=F3w?=
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

=?iso-8859-2?q?SQL:_left_join:_dublowanie_wynik=F3w?=



Staszek27 - 22-08-2007 00:02
=?iso-8859-2?q?SQL:_left_join:_dublowanie_wynik=F3w?=
  Witam!
Mam mały problem przy łączeniu tabel poprzez LEFT JOIN i szczerze
mówiąc, nie jestem w stanie go rozwiązać (chodzi o prostą galerię).
Oto tabele:
zdjecia:
nazwa | opis
kot | Jakiś kot je rybe
pies | Czarny pies biegnie za autem
tagi:
nazwa | tag
kot | zwierze
kot | ryba
pies | auto
pies | pies
oceny:
nazwa | ocena
kot | 6
// pies póki co nie ma ocen
Chciałbym sobie wyciągnąć to tak by mieć wszystko w jednym wyniku:
nazwa | tagi (wszystkie w jednym wierszu) | srednia ocena
Rzucam takie zapytanie:
SELECT zdjecia. * , AVG(oceny.ocena) AS ocena, GROUP_CONCAT(tagi.tag)
AS tagi FROM `zdjecia` LEFT JOIN `oceny` ON zdjecia.nazwa=oceny.nazwa
LEFT JOIN tagi ON zdjecia.nazwa=tagi.nazwa GROUP BY zdjecia.nazwa
Co otrzymuję w zamian za moją ciężką pracę?
nazwa | tagi (wszystkie w jednym wierszu) | srednia ocena
kot | zwierze,ryba,zwierze,ryba | 6.0000
pies | auto,pies | NULL
Proszę zauważyć, że oceniony kot ma zdublowane tagi (aż strach
pomyśleć, co by było gdyby miał więcej ocen). Dlaczego tak się dzieje?
Jak można temu zaradzić?
Z góry dziękuję za pomoc,
Stanisław Polański
P.S. Próbowałem też użyć dwóch LEFT JOIN:
SELECT zdjecia. * , AVG( oceny.ocena ) AS ocena,
GROUP_CONCAT( tagi.tag ) AS tagi
FROM `zdjecia`
LEFT JOIN `oceny` ON zdjecia.nazwa = oceny.nazwa
LEFT JOIN tagi ON zdjecia.nazwa = tagi.nazwa
GROUP BY zdjecia.nazwa
Rezultat: ten sam. Porzucenie LEFT JOIN skutkuje hecami gdy zdjęcie
nie ma oceny





=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 22-08-2007 00:02

  Staszek27 wrote:
> Witam!
> Mam mały problem przy łączeniu tabel poprzez LEFT JOIN i szczerze
> mówiąc, nie jestem w stanie go rozwiązać (chodzi o prostą galerię).
> Oto tabele:
> zdjecia:
> nazwa | opis
> kot | Jakiś kot je rybe
> pies | Czarny pies biegnie za autem
> tagi:
> nazwa | tag
> kot | zwierze
> kot | ryba
> pies | auto
> pies | pies
> oceny:
> nazwa | ocena
> kot | 6
> // pies póki co nie ma ocen

Tu chyba musi być więcej ocen kota, żeby był podany przez Ciebie efekt.

> Chciałbym sobie wyciągnąć to tak by mieć wszystko w jednym wyniku:
> nazwa | tagi (wszystkie w jednym wierszu) | srednia ocena
> Rzucam takie zapytanie:
> SELECT zdjecia. * , AVG(oceny.ocena) AS ocena, GROUP_CONCAT(tagi.tag)
> AS tagi FROM `zdjecia` LEFT JOIN `oceny` ON zdjecia.nazwa=oceny.nazwa
> LEFT JOIN tagi ON zdjecia.nazwa=tagi.nazwa GROUP BY zdjecia.nazwa
> Co otrzymuję w zamian za moją ciężką pracę?
> nazwa | tagi (wszystkie w jednym wierszu) | srednia ocena
> kot | zwierze,ryba,zwierze,ryba | 6.0000
> pies | auto,pies | NULL
> Proszę zauważyć, że oceniony kot ma zdublowane tagi (aż strach
> pomyśleć, co by było gdyby miał więcej ocen). Dlaczego tak się dzieje?
> Jak można temu zaradzić?
> Z góry dziękuję za pomoc,

Wywal GROUP BY, a zobaczysz dokładnie co się dzieje.
Po prostu tak nie wolno robić.

Średnią ocen lub/i tagi grupuj w podzapytaniach, dzięki temu nie będą Ci się
mnożyły rekordy.

--
P.M.




Staszek27 - 29-08-2007 00:11
=?iso-8859-2?q?Re:_SQL:_left_join:_dublowanie_wynik=F3w?=
  Paweł Matejski napisał(a):
> Wywal GROUP BY, a zobaczysz dokładnie co się dzieje.
> Po prostu tak nie wolno robić.
Nie da się.
> Średnią ocen lub/i tagi grupuj w podzapytaniach, dzięki temu nie będą Ci się
> mnożyły rekordy.
Mógłbym prosić o jakąś wskazówkę? Bo kompletnie nie wiem jak się za to
zabrać (z której strony ugryźć)? Gdyby każde zdjęcie miało oceny, to
coś może bym wykombinował, ale tak to nie mogę ruszyć :(
Dziękuję za odpowiedź,
Pozdrawiam!




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 29-08-2007 00:43

  Staszek27 wrote:
> Paweł Matejski napisał(a):
>> Wywal GROUP BY, a zobaczysz dokładnie co się dzieje.
>> Po prostu tak nie wolno robić.
> Nie da się.
>> Średnią ocen lub/i tagi grupuj w podzapytaniach, dzięki temu nie będą Ci się
>> mnożyły rekordy.
> Mógłbym prosić o jakąś wskazówkę?

To była wskazówka. Tam gdzie teraz masz tabele we FROM wstawiasz podzapytanie.
Zrób je tak, żeby zwracały nie więcej niż 1 wiersz na zdjecie.

> Bo kompletnie nie wiem jak się za to
> zabrać (z której strony ugryźć)? Gdyby każde zdjęcie miało oceny, to
> coś może bym wykombinował, ale tak to nie mogę ruszyć :(

A co to ma do rzeczy? Juz sobie z tym poradziłeś za pomocą LEFT JOIN.

P.S. A nie spróbowałeś zobaczyć co się dzieje po wyrzuceniu GROUP BY?

--
P.M.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Wydajność baz danych w zależności od poziomu izolacji ANSI/ISO Czy zna (obsługuje) ktoś program Iso Draw ? Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?= MYSQL - kodowanie w ISO-PL strona plus baza w iso do utf-8 Kodowanie: z iso na utf [oracle] - Oracle SQL Developer - co to jest SID? MS Sql Server 2000 i Server 2003 [MS SQL + kontakty outlook]CZy kontakty moge być zewnętrzne? [oracle] Baza danych do kursy Introduction to Oracle9i:PL/SQL ? Skąd ją pobrać ?
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • own-team.pev.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com