JOIN을 통해 다른 테이블에서 값을 선택하는 쿼리가 있습니다. 하지만 한 테이블이 다른 이름으로 다시 참여해야하기 때문에 문제가있는 것 같지만 어떻게 든 작동하지 않습니다.조인을 두 개 사용하여 여러 테이블 값 선택
소셜 네트워크 strucutre에 따라 예 :
표 "사용자"
+--------+-----------+
| 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"|
+--------+---------+-------------------------------+
표 "usertags"
+--------+---------------+
| 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로 설정합니다. 내가 누락 된 혜택이 없다면 중복 된 것처럼 보입니다. – kchason
@KeithChason은 아마도'IFNULL (***, '')' –