首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用每个项目的总金额来优化您的搜索。PHP与MYSQL

使用每个项目的总金额来优化您的搜索。PHP与MYSQL
EN

Stack Overflow用户
提问于 2009-10-02 13:51:04
回答 2查看 229关注 0票数 2

像在stackoverflow上搜索标签这样的“总运行”系统最好的方法是什么?例如,如果我点击'php‘,它会显示'each’其他标签上的项目总数,而且速度非常快。我如何用mysql在php中做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-02 13:58:45

这是一个“看起来”像这样的查询

代码语言:javascript
复制
SELECT T2.Tag, COUNT(*)
FROM SO_Posts P1
JOIN Post_Tags T1 ON P.PostId = T1.PostId
JOIN Post_Tags T2 ON P.PostId = T2.PostId
GROUP BY T2.Tag
WHERE T1.Tag = 'PHP'
ORDER BY COUNT(*) DESC

这个查询做出了合理的假设,即SO上的帖子(问题)存储在两个表中;

SO_Posts,每个帖子包含一条记录,并保存诸如PostId (主键)、问题本身、日期、标题等信息。

将给定的帖子(通过其Post_Id)与标签(或者更有可能是TagId,因为标签应该是规范化的,但这是一个细节)关联的Post_Tags。对于给定的帖子,Post_Tags中的记录数量与贴有不同标签的帖子一样多。

注意:实际上,SO Posts数据库的结构更加复杂,有不同的表用于存储评论、回复等,但是对于Post- to -Tag关系,这种两表布局(或者更像是允许在Post_Tags中有一个tagId而不是标签本身的3表布局)捕捉到了它是如何可能的、容易和快速的(如果提供了正确的索引)来显示这些过滤的聚集计数的本质。

这个想法是找到与目标标签(这里是'PHP')相关联的所有PostID(在“T1”中查找),然后按标签聚合所有帖子(在“T2”中)。

注意,主表SO_Posts在这里不是必需的,但它可能是查询的一部分,例如,允许添加额外的条件,例如帖子状态(未关闭...)。

票数 3
EN

Stack Overflow用户

发布于 2009-10-02 13:51:46

我可以想象他们只是使用了一个简单的select count(*) from questions where tag = $tagname,即缓存在memcached中的 (<-重要的部分)

正如一位评论者所说,他们也可能只是在一个单独的表中跟踪标签计数。但你不能真正确定--我们真正能做的就是猜测。它确实可以工作,但关键是你应该对你的应用程序进行基准测试,看看哪种方法更适合你。就我们所知,标签计数不是实时的,并且由表中的cron或其他东西每小时更新一次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1509625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档