UFO ET IT

MySQL 다중 왼쪽 조인

ufoet 2021. 1. 14. 07:50
반응형

MySQL 다중 왼쪽 조인


작업중인 웹 사이트에 대한 뉴스 페이지를 만들려고합니다. 올바른 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을 사용하면 댓글이없는 뉴스 항목이 표시되지 않습니다.


각 뉴스 게시물 제목에 대한 모든 세부 정보를 표시합니다. 기본 키인 "news.id", "news.id"에 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

참조 URL : https://stackoverflow.com/questions/1990352/mysql-multiple-left-joins

반응형