2016-08-25 2 views
0

Я пытаюсь выяснить, как показать имена пользователей вместо userid в запросе mysql, который пользователи GROUP_CONCAT. Следующий запрос работает, но показывает идентификаторы пользователя. Как я могу показать имена пользователей вместо этого?Как показать имена пользователей, используя GROUP_CONCAT?

Запрос

SELECT p.user_name, p.user_id, up.file, GROUP_CONCAT(c.userid) 
FROM tbl_uploads up 
LEFT JOIN tbl_users p ON up.user_id = p.user_id 
LEFT JOIN tbl_collab c ON up.file = c.file 
GROUP BY up.file 

Результаты

user_name | user_id | file  | GROUP_CONCAT(c.userid) 

Peter   5   pic_1.jpg    2,5 
Mary   6   pic_2.jpg    6 
julian  2   pic_3.jpg    (null) 
+0

'GROUP_CONCAT (c.usernames)'? – Jens

+0

ВЫБОР p.user_name, p.user_id, up.file, GROUP_CONCAT (c.userid), GROUP_CONCAT (c.user_name) в качестве имени пользователя ОТ tbl_uploads до LEFT JOIN tbl_users р = О up.user_id p.user_id LEFT JOIN tbl_collab c ON up.file = c.file GROUP BY up.file – premi

ответ

1

Присоединяйтесь к таблице пользователей еще раз, и получить имена пользователей оттуда:

SELECT p.user_name, p.user_id, up.file, GROUP_CONCAT(cp.user_name) 
FROM tbl_uploads up 
LEFT JOIN tbl_users p ON up.user_id = p.user_id 
LEFT JOIN tbl_collab c ON up.file = c.file 
LEFT JOIN tbl_users cp ON cp.user_id = c.userid 
GROUP BY up.file 
1

Предположительно, tbl_users имеет имена пользователей. Если да, то использовать это для GROUP_CONCAT():

SELECT up.file, GROUP_CONCAT(p.username) 
FROM tbl_uploads up LEFT JOIN 
    tbl_users p 
    ON up.user_id = p.user_id LEFT JOIN 
    tbl_collab c 
    ON up.file = c.file 
GROUP BY up.file; 

Примечание Я удалил p.username из SELECT. В общем случае в запросе агрегации все столбцы/выражения должны быть либо в GROUP BY, либо в аргументах для функций агрегации.

Смежные вопросы