0

快速方法说明:

我有两个表,我们将它们命名为表一和表二。每个表记录都有其作者(用户)的 id。每个用户的记录没有限制。

我想为每个用户运行一个统计页面。

例如,当 John 登录时:

约翰 | 20 个(列表)| B 150(列表)

演示代码

$a = mysql_query("SELECT * FROM A WHERE userID='$userID'");
$b = mysql_query("SELECT * FROM B WHERE userID='$userID'");

$a_num=mysql_num_rows($a);
$b_num=mysql_num_rows($b);

$echo "$userID | $a_num of A <a href='/a/$userID'>(list)</a> | $b_num of B <a href='/b/$userID'>(list)</a> ";

问题:

那么,当表记录数达到几百或几千时,检查记录数(每次用户访问他的统计页面)是否是最佳解决方案?有没有更好的方法来运行统计数据?也许是一个单独的表来计算每个用户的记录?

谢谢 :)

4

2 回答 2

3

由于您似乎没有使用结果集本身,

$a = mysql_query("SELECT COUNT(*) FROM A WHERE userID='$userID'");

将在 1 步中为您提供所需的计数。此外,它很可能比你正在做的要快得多。

其次,您正在考虑的那种优化绝对是可能的(group by userID您只需要一个,并且每小时或每天或其他任何时间运行该脚本,具体取决于所需的准确性)但我真的会等待那种东西直到你确定你需要它,因为这意味着服务器需要额外的工作和额外的代码来维护。

第三也是最后,摆脱不推荐使用的 mysql_query 调用,并查找准备好的语句。一旦你习惯了它们,就会更安全,也不会更难。

于 2012-06-17T14:10:28.993 回答
0

您可以告诉 MySQL 为您计算它们:

SELECT COUNT(*) AS a_num FROM A WHERE userID='$userID'

这最大限度地减少了应用程序和 MySQL 服务器之间的 I/O。自己对此进行基准测试。

于 2012-06-17T14:09:44.130 回答