填充php网格的400个SELECT查询

时间:2011-08-22 19:26:48

标签: php mysql

我的数据库中有2个表,表A和表B.我需要填充20x20正方形的视觉网格,总共400个正方形。我只需要读取数据,而不是插入或更新。

我的脚本做的是FOR循环遍历每个网格id,查询表A以查看数据是否存在,如果存在,则执行另一个mysql查询以从表B中提取数据。

你可以想象这是在使用大量资源(400个请求)。我不是最好的PHP,但想知道是否有人知道更好的方法吗?

注意:我不能组合2个表,它必须是分开的。

<table width="500" height="500" background="images/map.png"><?
$plot = 1;
for ($plot_y = 1; $plot_y <= 20; $plot_y++) {
  echo "<tr>";
  for ($plot_x = 1; $plot_x <= 20; $plot_x++) {
      $sql_result5 = mysql_query("SELECT * FROM turfs WHERE plot ='$plot'", $db);
      if (mysql_num_rows($sql_result5) != 0) {
          $rs5 = mysql_fetch_array($sql_result5);

          $nogo = 0; // SET COLOR TO rs5[color]
      } else {
          $nogo = 1;
      }
?><td width="23" height="23"><?php
      if ($nogo == 0) {
          $sql_result = mysql_query("SELECT * FROM properties WHERE plot = '$plot'", $db);
          if (mysql_num_rows($sql_result) > 0) {
              $rs = mysql_fetch_array($sql_result);

              echo "<img src=$rs[image]>";

          }
      }
      echo "</td>";
      $plot = $plot + 1;
  }
  echo "</tr>";
}
?></table>

2 个答案:

答案 0 :(得分:1)

显然,很多查询会占用大量内存。有一个“技巧”可以优化多个相同的查询 - prepared statements

你有两张桌子听起来像是需要一个join(如果你没有使用这样的话)。

如果数据不经常更新,您可以使用一些缓存。

有很多东西可以优化......

答案 1 :(得分:1)

在不知道你的桌面结构的情况下,我们所做的最好的就是猜测它,但是下面可能会给你一些新的想法。

它的要点是

  • 使用一个选择语句选择GridID和相关数据
  • 循环此语句的结果以填充您的网格

SQL语句(已编辑)

SELECT t.plot AS plot
       , t.plot MOD 20 AS plot_x
       , FLOOR(t.plot / 20) AS plot_y
       , CASE WHEN p.plot IS NULL THEN 'free' ELSE 'used' END
FROM   turfs AS t
       LEFT OUTER JOIN properties AS p ON p.plot = t.plot