我的数据库中有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>
答案 0 :(得分:1)
显然,很多查询会占用大量内存。有一个“技巧”可以优化多个相同的查询 - prepared statements。
你有两张桌子听起来像是需要一个join(如果你没有使用这样的话)。
如果数据不经常更新,您可以使用一些缓存。
有很多东西可以优化......
答案 1 :(得分:1)
在不知道你的桌面结构的情况下,我们所做的最好的就是猜测它,但是下面可能会给你一些新的想法。
它的要点是
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