Присоединиться к двум объединениям? - PullRequest
0 голосов
/ 01 августа 2020

Можно ли объединить следующие два запроса, чтобы теги для каждого audioid были включены в возвращаемый массив?

SELECT audioposts.audioname, audioposts.userid, audioposts.audioid, users.gavatar, //users.name, users.email, audioposts.title, audioposts.likes, audioposts.userid FROM audioposts LEFT JOIN //users ON users.id = audioposts.userid

SELECT tagname FROM entitytag LEFT JOIN tags ON entitytag.tagid = tags.tagid WHERE entitytag.audioid = '$audioid'

1 Ответ

2 голосов
/ 01 августа 2020

Похоже, вам просто нужно больше left join s:

SELECT 
    ap.audioname, 
    ap.userid, 
    ap.audioid, 
    u.gavatar, 
    u.name, 
    u.email, 
    ap.title, 
    ap.likes, 
    ap.userid,
    t.tagname
FROM audioposts ap 
LEFT JOIN users u ON u.id = ap.userid
LEFT JOIN entitytag et on et.audioid = ap.audioid
LEFT JOIN tags t on t.tagid = et.tagid

Я подозреваю, что это умножит ряды, поскольку audiopost, вероятно, может иметь несколько тегов. Возможно, вы захотите собрать все имена тегов вместе, например, используя агрегирование строк. Для этого будет иметь смысл коррелированный подзапрос:

SELECT 
    ap.audioname, 
    ap.userid, 
    ap.audioid, 
    u.gavatar, 
    u.name, 
    u.email, 
    ap.title, 
    ap.likes, 
    ap.userid,
    (
        SELECT GROUP_CONCAT(t.tagname)
        FROM entitytag et
        LEFT JOIN tags t on t.tagid = et.tagid
        WHERE et.audioid = ap.audioid
    ) tagnames
FROM audioposts ap 
LEFT JOIN users u ON u.id = ap.userid
...