У меня есть запрос, который выбирает значения из разных таблиц через JOIN. Но я думаю, что у меня сейчас проблема, потому что одну таблицу нужно снова объединить с другим именем, но почему-то это не работает.
Пример на основе структуры социальной сети:
Таблица «пользователи»:
+--------+-----------+
| userid | username |
+--------------------|
| 1 | userOne |
| 2 | userTwo |
| 3 | userThree |
+--------+-----------+
Таблица "посты":
+--------+---------+-------------------------------+
| postid | userid | text |
+--------------------------------------------------|
| 102 | 1 | "Haha i'm User one" |
| 103 | 1 | "And User one is the best" |
| 104 | 3 | "I'm having fun with user two"|
+--------+---------+-------------------------------+
Таблица "пользовательские теги":
+--------+---------------+
| postid | tagged_userid |
+------------------------|
| 104 | 2 |
+--------+---------------+
Это мой запрос:
SELECT posts.postid,
posts.userid,
posts.text,
users.username,
IFNULL(GROUP_CONCAT(DISTINCT usertags.tagged_userid SEPARATOR ','), NULL) as
taggedusers_id,
IFNULL(GROUP_CONCAT(DISTINCT taggedusers.fullname SEPARATOR ','), NULL) as
taggedusers_name,
FROM posts
JOIN users ON posts.userid = users.userid
LEFT JOIN usertags ON posts.postid = usertags.postid
LEFT JOIN users as taggedusers ON usertags.tagged_userid = users.userid
GROUP BY posts.postid
ORDER BY posts.postid DESC
И вот результат, который я получаю:
+--------+---------+---------------------------------------------------------------------+
| postid | userid | text | username | taggedusers_id |
+-----------------------------------------------------------------------|----------------|
| 102 | 1 | "Haha i'm User one" | userOne | NULL |
| 103 | 1 | "And User one is the best" | userOne | NULL |
| 104 | 3 | "I'm having fun with user two"| userThree | 2
+--------+---------+-------------------------------+--------------------+----------------+
Проблема: столбец taggedusers_name отображается, но всегда показывает NULL. Я хочу, чтобы он показывал имена пользователей, которые помечены. Вот так, а в целом большой выход
+---------------+-------------------+
| taggeduser_id | taggeduser_name |
+-----------------------------------|
| 2 | userTwo |
| 2,3 | userTwo,userThree |
| NULL | NULL |
+---------------+-------------------+
Итак, как это возможно? Нужно ли мне делать множественный оператор SELECT? Я уже пробовал это, но у меня тоже не получилось :/ Буду рад помощи!
IFNULL(***, NULL)
? По сути, вы говорите, что если этоNULL
, установите его наNULL
. Кажется излишним, если только я не упускаю выгоду. - person kchason   schedule 25.10.2017IFNULL(***, '')
- person Juan Carlos Oropeza   schedule 25.10.2017