[MySQL] problem z zapytaniem - ciekawe

0

Cześć, tworzę portal administracyjny dla strony zespołu muzycznego. Natknąłem się na problem, który jest związany z piosenkami. Mianowicie zainteresujemy się teraz dwoma tabelami:
Squad(ID, fName, nick, lName)
Songs(ID, title, mp3, textAuthor, musicAuthor, textAuthor2, musicAuthor2)

(jest jeszcze kilka pól, ale w tym problemie nie używane)

W tabeli SQUAD fName- to imię, lName to nazwisko, nick - wiadomo
W tabeli SONGS - textAuthor, musicAuthor - pola INT - przechowują odpowiednie ID z tabeli SQUAD.
textAuthor2, musicAuthor2 - pola Varchar - nienależący do zespołu autor muzyki lub tekstu - brane pod uwagę tylko wtedy gdy odpowiednio textAuthor lub musicAuthor = 0

Teraz jak zrobić z tego selecta?
Uzyskać chcę efekt, np(Karol i Zbysiu są członkami zespołu, a Bronek nie):

Tytuł MP3 Tekst Muzyka
Piosenka plik.mp3 Karol Zbysiu
Inna inna.mp3 Bronek Zbysiu

Próbowałem jakimiś konstrukcjami typu case when, ale coś mi w ogóle szło... Pomóżcie :)

0

Zakładając, że nie korzystasz z MySQL 5 (słuszne założenie) nie możesz robić podzapytań. Stąd wniosek, że na czystym SQL się tego chyba nie da zrobić.

0
Wolverine napisał(a)

A JOIN ON nie wystarczy?

Nie, jak to sobie wyobrażasz, skoro jedno pole z tabeli SQUAD "idzie" do dwóch pól z tabeli Songs?
Te ID mogą być różne, a mogą też być takie same.
Tu zwykłe join nie pomoże.

Ale postanowiłem, że ominę ten problem. Tzn. zamiast ID(w polach textAuthor...) będę trzymał tekst. Bo w sumie nie potrzebuję całego rekordu, tylko imię, nick i nazwisko.

0
Juhas napisał(a)
Wolverine napisał(a)

A JOIN ON nie wystarczy?

Nie, jak to sobie wyobrażasz, skoro jedno pole z tabeli SQUAD "idzie" do dwóch pól z tabeli Songs?
Te ID mogą być różne, a mogą też być takie same.
Tu zwykłe join nie pomoże.

Bzdury gdasz kolego. Oczywiscie ze sie da:

SELECT
  Songs.title,
  Songs.mp3,
  Squad_1.nick,
  Squad_2.nick
FROM 
  (Songs LEFT JOIN Squad AS Squad_1 ON (Songs.textAuthor = Squad_1.id)) 
  LEFT JOIN Squad AS Squad_2 ON (Songs.musicAuthor2 = Squad_2.id)
0

@spc: Ale takie rozwiązanie nie pozwoli Ci na umieszczenie tego w jednej "zmiennej" zwracanej przez MySQL zależnie od tego, jaki jest id.

0

Kurdesz, nie kumam problemu...

0

Chodzi mi o to, że w ten sposób później przetwarzając zwrócone dane musisz sprawdzić, gdzie znalazły się odpowiednie dane, których potrzebujesz, podczas gdy dzięki podzapytaniom mogłaby zająć się tym aplikacja serwera bazy danych.

0
Adam.Pilorz napisał(a)

Zakładając, że nie korzystasz z MySQL 5 (słuszne założenie) nie możesz robić podzapytań. Stąd wniosek, że na czystym SQL się tego chyba nie da zrobić.

Podzapytania mozna robic juz od wersji 4.1.X

0

W MS SQL jest taka fajna funkcja IsNull i to by rozwiazalo problem jak sadze. Daloby sie tez zastosowac IIf. Ale te funkcje nie maja chyba odpowiedników w MySQL :(

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0