我正在尝试为我正在处理的网站创建新闻页面.我决定使用正确的MySQL查询(意思是COUNT(id)和连接而不是多个查询或num_rows.)我正在使用一个PDO包装器,它应该运行正常,直到通过运行时仍然会失败MySQL CLI应用程序.
基本上,我有3张桌子.一个持有新闻,一个持有评论,一个持有用户.我的目标是创建一个页面,显示所有(稍后将分页)新闻帖子标题,正文,作者和日期.当我使用第二个查询来获取用户名时,这工作正常,但后来我决定使用JOIN.
所以有什么问题?好吧,我需要两个连接.一个是获取作者的用户名,另一个是获取评论的数量.当我只是找到作者的用户名时,一切都按预期工作.显示新闻表中的所有行(有2个).但是,当我为评论行添加第二个LEFT JOIN时,我最终只从新闻中收到一行(记住,有2个),COUNT(comments.id)给我2个(它应该显示1,因为我有每个帖子的评论.)
我究竟做错了什么?为什么它只显示一个新闻帖子,并说它有两个评论,当有两个新闻帖子,每个都有一个评论?
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
Run Code Online (Sandbox Code Playgroud)
另外,为了确定另一件事,我的左边加入评论是获取所有帖子的正确方法,无论他们是否有评论,对吗?或者这是一个正确的加入?哦,最后一件事......如果我将comments.news_id = news.id切换到news.id = comments.news_id,我得到0结果.
Mar*_*ers 102
您缺少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
Run Code Online (Sandbox Code Playgroud)
左连接是正确的.如果您使用了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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
201180 次 |
| 最近记录: |