2017-06-08 1 views
0

ich habe folgendes Problem und mein Gehirn ausbrennt :)mysql auswählen, die auf zwei verschiedene Tabellen je nach Feldwert

Ich habe zwei Tabellen mit personenbezogenen Daten (ein für Kunden TABLE_A 'und ein für interessante Völker Tabelle_b '). In einer dritten Tabelle 'table_inv' gibt es Einträge mit eingeladenen_personen aus beiden Tabellen (a und b).

Die Tabelle_inv hat ein Feld 'eingeladene_ID', in dem die ID aus Tabelle a oder Tabelle b gespeichert ist. Ein anderes Feld 'type' hat den Wert 'cust' oder 'interest', um zu unterscheiden, von welcher Tabelle (a oder b) der Eintrag kommt.

Jetzt muss ich die vollen Daten von TABLE_A/Table_B erhalten je nach dem Wert aus dem Feld ‚Typ‘ ...

Ich versuchte es whith Fall und wenn aber ohne Ergebnis.

Ich suche so etwas wie:

SELECT a.id, a.created, a.userid, a.type, a.inviteid, b.name_first, b.name_last, b.zip, b.city 
FROM ext_event_invites a 
CASE a.type 
    WHEN 'CUST' THEN 
     LEFT JOIN accounts b ON a.inviteid = b.id; 
    ELSE 
     LEFT JOIN ext_contacts b ON a.inviteid = b.id; 
END CASE 
WHERE a.eventid = :eventid AND a.userid = '4711' 
ORDER BY b.name_last ASC, b.name_first ASC 

Kann mir jemand helfen?

Antwort

0

Sie könnten einfach zu beiden Tabellen verbinden und dann die Daten aus dem entsprechenden auswählen. Eine andere Option ist unten angegeben. Ich habe die Alternative zu 'CUST' angenommen ist 'CONT' (für ‚Kontakt‘), so dass Sie, dass zwicken benötigen, wenn es ist etwas anderes ...

SELECT 
    a.id, a.created, a.userid, a.type, a.inviteid, 
    b.name_first, b.name_last, b.zip, b.city 
FROM 
    ext_event_invites i 
    LEFT JOIN 
    (
    SELECT 
     'CUST' as type, 
     a.name_first, 
     a.name_last, 
     a.zip, 
     a.city 
    FROM accounts a 

    UNION ALL 

    SELECT 
     'CONT' as type, 
     c.name_first, 
     c.name_last, 
     c.zip, 
     c.city 
    FROM ext_contacts c 
    ) as b ON 
     i.inviteid = b.id AND 
     i.type = b.type 
WHERE 
    a.eventid = :eventid AND a.userid = '4711' 
ORDER BY 
    b.name_last ASC, 
    b.name_first ASC 
+0

@pengels. Lass es mich wissen, ob das für dich funktioniert hat. Wenn nicht, lassen Sie es mich wissen und ich werde versuchen, es zu beheben. Wenn ja, bitte kreuzen Sie die Antwort als Dankeschön als "akzeptiert" an. –

+0

Habe gerade einige Tippfehler mit meinen Aliasen entdeckt. Diese sind jetzt korrigiert. Lass mich wissen, wie es dir geht. –

+0

Das hat bei mir funktioniert, danke an dich! – pengels

0

Bitte versuchen Sie es. Das sollte funktionieren.

SELECT a.id, a.created, a.userid, a.type, a.inviteid, b.name_first, b.name_last, b.zip, b.city 
FROM ext_event_invites a 
IF a.type = 'CUST' THEN 
    LEFT JOIN accounts b ON a.inviteid = b.id; 
ELSE 
    LEFT JOIN ext_contacts b ON a.inviteid = b.id; 
WHERE a.eventid = :eventid AND a.userid = '4711' 
ORDER BY b.name_last ASC, b.name_first ASC 
Verwandte Themen