php – MySQL SELECT语句只返回一行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – MySQL SELECT语句只返回一行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1745字,纯文字阅读大概需要3分钟。
内容图文
自从我上次提出一个问题以来已经有很长一段时间了,但是我一直在努力搞乱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.authorID,
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())例).对于这种情况下的静态查询,您可以安全地调用PDO::query(),减少开销,减少代码.
内容总结
以上是互联网集市为您收集整理的php – MySQL SELECT语句只返回一行全部内容,希望文章能够帮你解决php – MySQL SELECT语句只返回一行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。