在这种情况下,每个页面将显示30个主题,所以我至少执行了1个sql语句,此外,我还想显示每个主题有多少重复,以及作者是谁,因此 我必须使用30个语句来计算replpies的数量,并使用其他30个语句来查找作者。最后,我得到了61个语句,我真的担心效率。
我的表格如下:
Topic Reply User ------- ---------- ------------ id id id title topic_id username ... ... author_id
答案 0 :(得分:2)
您应该在查询期间查看连接表。
举个例子,我可以做到以下几点:
SELECT reply.id, reply.authorid, reply.text, reply.topicid,
topic.title,
user.username
FROM reply
LEFT JOIN topic ON (topic.id = reply.topicid)
LEFT JOIN user ON (user.id = reply.authorid)
WHERE (reply.isactive = 1)
ORDER BY reply.postdate DESC
LIMIT 10
答案 1 :(得分:2)
如果我正确阅读了您的要求,您需要以下查询的结果:
SELECT Topic.title, User.username, COUNT(Reply.topic_id) Replies
FROM Topic, User, Reply
WHERE Topic.id = Reply.topic_id
AND Topic.author_id = User.id
GROUP BY Topic.title, User.username
答案 2 :(得分:1)
当我第一次开始使用数据库驱动的Web应用程序时,我遇到了类似的问题。然后我花了几年时间在数据库丰富的环境中工作,实际上我学习了SQL。如果您打算继续开发Web应用程序(我觉得这些应用程序非常有趣),那么值得您花时间学习一本书或查看基本和高级SQL的一些操作方法。
答案 3 :(得分:1)
在JOINS之上添加一件事
可能是您的数据组不匹配或无关,因此JOIN不起作用。另一种方式:你可能有2个主要的数据块,这些数据很难加入。
存储过程可以返回多个结果集。
例如,对于摘要页面,您可以在一次SQL调用中返回一个聚合结果集和另一个“最后20”结果集。加入2是很尴尬的,因为它不能“适合”在一起。
答案 4 :(得分:0)
你当然可以在这个上使用一些“左连接”,但是因为输出只有在有人更新/添加到你的表时你才会尝试将它缓存在xml / text文件中。另一种方法是通过在主题表中添加另一行来保留回复计数,用户名等来构建一些冗余...并且仅在发生更改时更新它们...