Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: złączenie pod pewnymi warunkami
Forum PHP.pl > Forum > Bazy danych > MySQL
maciu
Czy jest w mysqlu taka możliwość, aby złączenie tabel zależało od pewnego warunku, np.
  1. SELECT * FROM tabela case when pole = 1 then JOIN tabela2 else JOIN tabela3 end


męczę się nad tym od jakiegoś czasu i nie mogę znaleźć rozwiązania. Przypuszczam, że nie da się tego rozwiązać, ale może ktoś z Was miał podobne doświadczenie?
nevt
da się to zrobić... zakładam 3 tabele:

Ta => (id_a, id_join, pole)
Tb => (id_b, opis)
Tc => (id_c, opis)

wtedy zapytanie wygląda tak:
  1. SELECT * FROM Ta LEFT JOIN (SELECT id_b , opis, 1 AS warunek FROM Tb UNION SELECT id_c, opis, 0 AS warunek FROM Tc) AS tmp ON id_join=id_b AND pole=warunek;

Powodzenia.
JoShiMa
A co jeśli tabele Tb i Tc się różnią? Inna ilość i format kolumn...
nevt
niemożliwe, w wyniku SQL nie możemy dostać w jednym wierszu 5 pól a w innym 9 pól...
wynikiem zapytania SQL jest zawsze macierz.
JoShiMa
Tak mi się właśnie wydawało
nevt
można zbudować potworka, który po stronie sql upakuje tą zmienną ilość pól do pojedynczego pola w CONCAT_WS(), a potem po stronie PHP rozbijasz to sobie z powrotem w explode() ... ale odradzam takie rozwiązanie. taka potrzeba wyraźnie wskazuje na niedopatrzenie w strukturze danych, i lepiej sie skupić na zmianie tej struktury.
JoShiMa
Cytat(nevt @ 15.01.2009, 15:43:09 ) *
taka potrzeba wyraźnie wskazuje na niedopatrzenie w strukturze danych, i lepiej sie skupić na zmianie tej struktury.

Nie sądzę, żeby to było niedopatrzenie i w ogóle nie widzę powodu zmieniać struktury danych.
nevt
Cytat
Nie sądzę, żeby to było niedopatrzenie i w ogóle nie widzę powodu zmieniać struktury danych.

no fakt. to z pewnością niedopatrzenie projektantów MySQL, że nie przewidzieli możliwości zwracania w jednym wyniku wierszy o różnej ilości kolumn i różnych typach danych...
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-2025 Invision Power Services, Inc.