본문 바로가기
MySql

MySQL 다중 왼쪽 조인

by 베이스 공부 2020. 12. 18.
반응형

작업중인 웹 사이트의 뉴스 페이지를 만들려고합니다. 올바른 MySQL 쿼리 (하나 이상의 쿼리 또는 num_rows 대신 COUNT (id) 및 조인을 의미)를 사용하기로 결정했습니다. PDO 래퍼를 사용하고 있는데 제대로 작동해야합니다. MySQL CLI 애플리케이션.

기본적으로 3 개의 테이블이 있습니다. 하나는 뉴스를 보유하고 하나는 댓글을 보유하고 다른 하나는 사용자를 보유합니다. 내 목표는 뉴스 게시물 제목, 본문, 작성자 및 날짜를 ​​모두 표시 (나중에 페이지 매김)하는 페이지를 만드는 것입니다. 두 번째 쿼리를 사용하여 사용자 이름을 얻었을 때 이것은 잘 작동했지만 JOIN을 사용하기로 결정했습니다.

그래서 무엇이 문제입니까? 두 개의 조인이 필요합니다. 하나는 작성자의 사용자 이름을 가져오고 다른 하나는 댓글 수를 가져 오는 것입니다. 저자의 사용자 이름으로 이동하면 모두 예상대로 작동합니다. 뉴스 테이블의 모든 행 (2 개)이 표시됩니다. 그러나 주석 행에이 두 번째 LEFT JOIN을 추가하면 뉴스에서 하나의 행만 수신되고 (2 개가 있음을 기억하십시오) COUNT (comments.id)는 2를 제공합니다 (1이 표시되어야합니다. 각 게시물에 대한 의견.)

내가 뭘 잘못하고 있죠? 뉴스 게시물이 2 개 있고 각각 하나의 댓글이있는 경우 왜 하나의 뉴스 게시물 만 표시하고 두 개의 댓글이 있다고 말하는 이유는 무엇입니까?

SELECT news.id, users.username, news.title, news.date, news.body, COUNT(comments.id)
FROM news
LEFT JOIN users
ON news.user_id = users.id
LEFT JOIN comments
ON comments.news_id = news.id

또한 다른 한 가지에 대해 확신하기 위해 왼쪽 댓글에 참여하는 것은 댓글이 있는지 여부에 관계없이 모든 게시물을 얻는 올바른 방법입니다. 맞습니까? 아니면 올바른 조인일까요? 아, 마지막으로 ... comments.news_id = news.id를 news.id = comments.news_id로 바꾸면 0 개의 결과가 나옵니다.

 

해결 방법

 

GROUP BY 절이 누락되었습니다.

SELECT news.id, users.username, news.title, news.date, news.body, COUNT(comments.id)
FROM news
LEFT JOIN users
ON news.user_id = users.id
LEFT JOIN comments
ON comments.news_id = news.id
GROUP BY news.id

왼쪽 조인이 정확합니다. INNER 또는 RIGHT JOIN을 사용하면 댓글이없는 뉴스 항목이 표시되지 않습니다.

 

참조 페이지 https://stackoverflow.com/questions/1990352

 

 

반응형

댓글