php – MySQL SELECT语句只返回一行
发布时间:2020-12-13 16:53:27 所属栏目:PHP教程 来源:网络整理
导读:自从我上次提出一个问题以来已经有很长一段时间了,但是我一直在努力搞乱SQL以试图构建我自己的论坛系统. 我的问题的背景是我正在尝试创建一个函数来显示最流行的线程,根据它有多少回复以及最近的回复最近. 通过一些阅读,我做了这个SQL语句. SELECT topics.id
自从我上次提出一个问题以来已经有很长一段时间了,但是我一直在努力搞乱SQL以试图构建我自己的论坛系统.
我的问题的背景是我正在尝试创建一个函数来显示最流行的线程,根据它有多少回复以及最近的回复最近. 通过一些阅读,我做了这个SQL语句. SELECT topics.id,topics.authorID,topics.lastReply FROM ms_topics as topics INNER JOIN (SELECT inTopic FROM ms_posts) as rcount ON rcount.inTopic = topics.id ORDER BY topics.lastReply DESC,count(rcount.inTopic) 然后我使用PDO的fetchAll()函数将结果带入变量. $GetPopular = $db->prepare('SQL Statement Above'); $GetPopular->execute(); $Populars = $GetPopular->fetchAll(); 并且,为了解决问题,我在$populars上使用var_dump(),它只返回数据库中的一行. array(1) { [0]=> array(3) { ["id"]=> string(1) "4" ["authorID"]=> string(1) "1" ["lastReply"]=> string(19) "2014-06-08 19:49:50" } } 我的问题基本上就是这个;为什么它不会返回多行,我该怎么做呢? 解决方法
您使用已连接的子查询处于正确的轨道上,但您需要在子查询中应用COUNT().否则,聚合组将应用于外部查询,从而生成一行.
这是因为你没有GROUP BY,MySQL很宽松.它为您提供了一行,而不是您期望的结果,其中大多数其他RDBMS会给您一个解析错误.否则,没有GROUP BY的聚合函数(COUNT(),MIN(),MAX(),SUM()等)将永远不会返回多行. SELECT topics.id,topics.lastReply,postsInTopic FROM ms_topics as topics /* The subquery provides the aggregate count grouped per inTopic */ INNER JOIN ( SELECT inTopic,COUNT(*) AS postsInTopic FROM ms_posts GROUP BY inTopic ) as rcount ON rcount.inTopic = topics.id ORDER BY topics.lastReply DESC,/* Use the alias from the subquery postsInTopic to srot */ postsInTopic 关于PDO和prepare()的快速说明:虽然它在您的工作流中是一件好事,但如果您的查询没有输入值(没有动态WHERE子句,则不是必须使用prepare()/ execute())例).对于这种情况下的静态查询,您可以安全地调用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |