Gibt es eine bessere Möglichkeit, dies zu tun?Mehrere Spalten aus SELECT zurückgeben geschachtelt innerhalb CASE MySQL
SELECT subs. * ,
CASE subs.member_type
WHEN 'member' THEN
(SELECT CONCAT_WS(' ', members.first_name, members.last_name)
FROM members
WHERE members.id = subs.member_id)
ELSE
(SELECT members_anon.username
FROM members_anon
WHERE members_anon.id = subs.member_id)
END AS fullname,
CASE subs.member_type
WHEN 'member' THEN
(SELECT members.email
FROM members
WHERE members.id = subs.member_id)
ELSE
(SELECT members_anon.email
FROM members_anon
WHERE members_anon.id = subs.member_id)
END AS email
FROM subs
WHERE subs.item_id =19
AND subs.item_type = 'blog'
LIMIT 0 , 30
Im Idealfall würde Ich mag nur eine CASE
Abschnitt haben, die Namen und E-Mail aus der entsprechenden Tabelle zurückgegeben.
Vielen Dank für Ihre Antwort, es funktioniert gut. Ich bin mir nicht sicher, ob ich es vollständig verstehe - sind die 'LEFT OUTER'-Joins nur dann gemacht, wenn der Vergleich innerhalb ihrer jeweiligen Klammern 'wahr' auswertet? –
Aha! Ich denke, ich verstehe es jetzt. Der Fall "fügt" Selektionen zum SELECT-Teil hinzu. Wenn also "subs.member_type = 'member'", dann wird das SELECT-Bit: 'subs. *, M.username, m.email'. So wird der 'LEFT OUTER' auf ma ausgeführt, aber nicht in der Ergebnismenge enthalten. Recht? Ich nehme an, dass dies keine Auswirkungen auf die Performance haben wird, da alle '* .id' Spalten 'primary_keys' sind? –