400 SELECT запросов для заполнения сетки php

У меня есть две таблицы в моей базе данных, таблице A и таблице B. Мне нужно заполнить визуальную сетку размером 20×20 квадратов, всего 400 квадратов. Мне просто нужно прочитать данные, а не вставлять или обновлять.

То, что делает мой скрипт, – это FOR цикл через каждый идентификатор сетки, запрашивает таблицу A, чтобы увидеть, существуют ли данные, и если это так, то другой запрос mysql извлекает данные из таблицы B.

Как вы можете себе представить, это использование большого количества ресурсов (400 запросов). Я не лучший на PHP, но задавался вопросом, знает ли кто-нибудь о лучшем способе сделать это?

Примечание. Я не могу объединить две таблицы, она должна быть отдельной.

<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 таблицы, которые звучат так, как будто вам нужно соединение (если вы не используете такие).

Затем вы можете использовать некоторое кеширование, если данные не обновляются очень часто.

Есть много вещей, которые можно было бы оптимизировать …

Не зная вашей структуры таблицы, лучше всего мы можем догадаться, но последующие могут дать вам несколько новых идей для работы.

Суть его заключалась бы в том, чтобы

  • выберите GridID и соответствующие данные с помощью одного оператора select
  • петля над результатами этого оператора, чтобы заполнить вашу сетку

Заявление 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