php - 获取每个用户的最新 N 个帖子

标签 php mysql database performance

我的数据库中有 2 个表,UserPost。第一个表存储用户的个人数据,第二个表存储用户的帖子。

我想构建 1 个查询来为每个用户获取最新的 N 个帖子,我能够通过循环遍历每个用户并获取最新的帖子并将它们存储在数组中以备后用,但是性能太差了不好,我无法转发它,因为用户和帖子太多(超过 20000 名用户)。

所以我需要一些动态查询来获取这些帖子,当然我会为它添加一些分页。

提前致谢。

最佳答案

您需要阅读 JOIN 以针对多个表编写单个查询。

例如:select post from posts join users on posts.poster_id = users.user_id

为了获得良好的性能,请确保您的索引设置正确,通常是在 poster_id 上,但它也取决于您在 where 子句中使用的列。

您可以在其末尾添加 where 子句以仅返回特定时间或用户的帖子。分页更棘手,取决于您使用的数据库。

我使用的分页(在 SqlServer 2008r2 中,使用 Sql2012 可以不同地完成):

SELECT <columns>
FROM (SELECT ROW_NUMBER() OVER (ORDER BY Time DESC) as RowNum, * from <query>) as RowConstrainedResult 
WHERE RowNum >= X AND RowNum < Y 
ORDER BY RowNum

用相关行号(例如 101 和 200)替换列、查询以及 X 和 Y 的位置

关于php - 获取每个用户的最新 N 个帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23110673/

相关文章:

php - 使用 jquery 加载 php 页面

PhpStorm 和 Remote XDebug 不工作

mysql - 无法使用 Homebrew 和 Mac 10.8.5 完全卸载 MYSQL 如何从旧安装中查找/删除 "/etc/my.cnf"?

javascript - Sequelize 不保存包含的对象

mysql - 在 2 种不同类型的数据库之间共享 1 个表

database - 根据这张图,为什么 RDBMS 的 CS 系统是 CAP 意义上的?

php - 使用 Swiftmailer 发送多个附件

php - 我正在使用 filemtime,它不断返回以下数字 : 1302021664. 这是为什么?

java - JDBC:UserID作为主键,在Java代码中增加

MySQL 数据导出更改时间