Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Warunkowe łączenie Tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
Dabroz
Mam powiedzmy 3 tabele, które wyglądają tak:

Kod
Table tTID
----------
int TID
int TYPE
varchar NAME

Table tTEXT
-----------
int TEXT_ID
int TID
varchar TITLE
text TEXT_TEXT

Table tIMAGE
------------
int IMAGE_ID
int TID
varchat TITLE
blob IMAGE_IMAGE


(tabele są czysto teoretyczne)

Jeżeli chce wyciągnąć dane z tych tabel na podstawie TID, mogę zrobić np. tak:

  1. SELECT s.TITLE FROM (tTEXT s LEFT JOIN tTID id ON s.TID=id.TID) WHERE id.NAME IN ("a","b")


Analogicznie w przypadku tabeli IMAGE

  1. SELECT s.TITLE FROM (tIMAGE s LEFT JOIN tTID id ON s.TID=id.TID) WHERE id.NAME IN ("a","b")


Chciałbym połączyć to w jedno zapytanie, ciągle korzystając z LEFT JOIN.
Czy można sformułować zapytanie tak, aby np. przy tTID.TYPE=0 wiązana była tabela tTEXT, a przy tTID.TYPE=1 tabela tIMAGE?
halfik
ja tam jakos szczegolnie dobry z BD nie jestem, ale uwazam ze w samym SQLu pod MySQLem nie.

ale mozesz pomieszac w smym phpie i odpowiednio ukladac zapytanie...
Parti
Cytat(Dabroz @ 2004-08-30 14:16:14)
Chciałbym połączyć to w jedno zapytanie, ciągle korzystając z LEFT JOIN.
Czy można sformułować zapytanie tak, aby np. przy tTID.TYPE=0 wiązana była tabela tTEXT, a przy tTID.TYPE=1 tabela tIMAGE?

  1. SELECT ifnull(timage.title, ttext.title) FROM ttid LEFT JOIN ttext ON (ttid.tid = ttext.tid AND ttid.type = 0)
  2. LEFT JOIN timage ON (ttid.tid = timage.tid AND ttid.type = 1)
  3. WHERE ttid.name IN ('a', 'b')


Coś w tym stylu. Polecam przeczytać: Writing UNION Statements in MySQL 3.x
Dabroz
Dzięki Parti. O czymś takim właśnie myślałem guitar.gif
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-2024 Invision Power Services, Inc.