【问题标题】:Alternative solution for PHP/SQL max array size problemPHP/SQL 最大数组大小问题的替代解决方案
【发布时间】:2011-08-23 18:24:20
【问题描述】:

我在 MYSQL 中的 100 个数据库中捆绑了一个表(即 database_1 中表的第 1 x 行,database_2 中表的第 2 x 行,...,database_100 中表的最后 x 行)

每当用户拜访朋友玩游戏时,每张桌子都会有一行。 这些列是 iuin、logtime、beuin。 iuin 是访问者的用户 ID。 beuin 是访问过的朋友的用户 ID。 logtime 是访问的时间。

我想找出一周内访问过的不同朋友的数量。 每天访问大约 30 万不同的用户。

但是,当我将代码扩展为一周计算时,内存不足。 我的代码基本上使用 SELECT DISTINCT beuin 为每个数据库中的表在选定的一周内执行 SQL 查询。如果尚未存储所有 beuin,则将其存储在一个数组中(因此我计算访问过的不同朋友),并在最后返回数组的大小。

仅供参考,我无法编辑数据库,例如将不同数据库中的所有表合并到一个表中。

有没有其他方法可以做到这一点? 谢谢

【问题讨论】:

  • 将其存储在数组中并获取数组大小的目的是什么?
  • 所以我只计算不同的用户。理想情况下,这些表不会捆绑到不同的数据库中,所以我可以只执行 SELECT DISTINCT beuin 并返回 mysql_num_rows()。

标签: php mysql sql arrays memory


【解决方案1】:

没有这个就很难说你的任何事情。但我认为你可以使用 mysql 解决这个问题。我的快速解决方案:

  1. 创建表 - 如果不存在则创建表 users_ids(user_id INT NOT NULL DEAULT 0 PRIMARY KEY(UNIQUE));在第一个分贝中
  2. 截断 users_ids
  3. 运行 100 个查询,例如 INSERT IGNORE INTO db1.users_ids select distinct user_id from db1.table1;
  4. 从 users_ids 中选择 count(*);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-04
    • 2015-03-03
    • 2019-09-24
    • 1970-01-01
    • 2021-10-05
    • 2021-03-31
    • 1970-01-01
    • 2018-10-15
    相关资源
    最近更新 更多