最佳查询 - 在循环中避免数百个查询的任何方法?

时间:2011-09-11 11:16:47

标签: php mysql optimization

我想每天为游戏保存前100名的结果。

我有两个表:Users,Stats。

用户数据库有两列: userID (mediumint(8)unsigned AUTO_INCREMENT)和 userName (varchar(500))。

统计数据库有三列:时间(日期),用户ID (mediumint(8)无符号AUTO_INCREMENT),结果(tinyint(3) )unsigned)。

现在,每次执行查询(每天)时,我都有100个结果的用户名数组。所以这就是我需要做的事情:

对于数组中的每个结果:

  1. 从“用户”表中获取用户ID - 或者如果“用户”中不存在用户 表比创建条目并获取id;
  2. 插入统计表当前日期,用户ID和结果。
  3. 在php和mysql中执行此操作的最佳方法是什么。有没有办法避免在'for'循环中有200个查询。

    感谢您的时间。

2 个答案:

答案 0 :(得分:1)

  1. 200天查询标准日没什么。您可以将所有内容保留原样,并且不会出现任何问题。

  2. 为什么你有一个带有用户名的数组,而你应该有用户id呢?

  3. Mysql INSERT查询支持多个VALUES语句。所以,你可以组装一个像

    这样的字符串

    VALUES(time,userid,result),(time,userid,result),(time,userid,result)

  4. 立即运行。

    另请注意,userID应为int,而不是中等int,而在stats表中则不应自动增加。

答案 1 :(得分:0)

使用一对prepared statements。您仍将每次运行100次,但查询本身已经被解析(甚至由DB服务器缓存),它只需要运行100个不同的参数集,这非常有效。 / p>