2016-06-07 3 views
0

Es gibt eine Tabelle der Chat-Teilnehmer, data_chats_parties. In dieser Tabelle gibt es zwei Felder, team und member, die angeben, ob der Teilnehmer ein Mitglieds- oder Teamkonto ist. Wenn Team = 0, dann ist es ein Mitgliedskonto. Wenn team! = 0 ist es ein Team-Account.JOIN verschiedene Tabellen je nach Zustand

Wenn es ein Team-Konto ist, muss ich die name Spalte aus der data_teams Tabelle abrufen. Andernfalls muss ich die username Spalte aus der data_members Tabelle abrufen.

Offensichtlich funktioniert diese Abfrage nicht, aber es ist, was ich versuche zu erreichen.

SELECT data_chats_parties.*,data_teams.name,data_members.username 
FROM data_chats_parties 
    IF (data_chats_parties.team!=0 THEN 
    INNER JOIN data_teams ON data_teams.id=data_chats_parties.team ELSE 
    INNER JOIN data_members ON data_members.id=data_chats_parties.member) 
WHERE data_chats_parties.member!=1 
GROUP BY data_chats_parties.id 

Die WHERE data_chats_parties.member!=1 Linie sagt nur „Teilnehmer holen, die mich nicht sind“.

Kann dies auf diese Weise erreicht werden?

+0

separate Abfragen Sie für jede verbinden und kombinieren sie mit 'UNION'. – Barmar

Antwort

1

Sie müssen zwei verschiedene Abfragen verwenden und die führen ein UNION ALL:

-- Get teams 
SELECT 
    dcp.*, dt.name 
FROM data_chats_parties dcp 
INNER JOIN data_teams dt 
    ON dt.id = dt.team 
WHERE 
    dcp.member <> 1 
    AND dcp.team <> 0 

UNION ALL 

-- Get members 
SELECT 
    dcp.*, dt.name 
FROM data_chats_parties dcp 
INNER JOIN data_members dm 
    ON dt.id = dt.member 
WHERE 
    dcp.member <> 1 
    AND dcp.team = 0 
Verwandte Themen