我有一個系統通過數據庫查看,創建一個指定大小的表,然後用滿或空填充單元格,這取決於數據庫中是否有數據具體位置。將MySQL查詢循環轉換爲PHP數組(表)
目前它的工作方式是對每個單元格執行SQL查詢然後填充,但我在數據庫中有超過30,000個記錄,即使使用LIMIT 1,它仍然需要大約5秒來加載表格。
我想知道如果將整個內容轉儲到一個PHP數組中,然後查詢這種方式會更好,但不能找出排序的最佳方法,歡迎提供任何提示。
電流(工作)代碼:
echo <<<EOD
<table class="racktable"><tr>
<td colspan ="$colspan">Rack Details </td>
</tr>
<tr>
<td colspan ="$colspan"><center><a href="edit-rack.php?rack=$rackID">Edit Rack</a>/<a href="edit.php?query=emptyr&rack=$rackno&location=$location&user=$user">Empty Rack</a>/<a href="edit.php?query=delrack&rack=$rackID&user=$user&loc=$location">Delete Rack</a></center> </td>
</tr>
EOD;
//Loop through rows, creating a <tr> for each in the table
for ($row1 = 1; $row1 <= $rows; $row1++) {
echo <<<EOD
<tr><td><a name="$row1"></a>$row1</td>
EOD;
//Loop through columns creating <td> within <tr>
for ($col1 = 1; $col1 <= $columns; $col1++) {
$sql2 = "SELECT ID, sample, rack, srow, col, location FROM samples WHERE srow = $row1 and col = $col1 and location = '$location' and rack = '$rack' LIMIT 1";
if (!$result2 = $db->query($sql2)) {
die('There was an error running the query [' . $db->error . ']');
}
$row3 = $result2->num_rows;
//If location is empty, colout green
if ($row3 == 0) {
echo "<td style=\"background-color: #A3CD81\">" . $col1 . "</td>";
}
else {
//Location is not empty, colour red and link to sample
while ($row2 = $result2->fetch_assoc()) {
$columns1 = $row2['col'];
$ID = $row2['ID'];
$tooltip = $row2['sample'];
$queryStr = $_SERVER['QUERY_STRING'];
$spath = $_SERVER['PHP_SELF'] . "?" . $queryStr . "&sample=" . $ID;
echo <<<EOD
<td style="background-color: #FF0000" title="$tooltip"><a href="$spath">$col1 <img src="icon.png" style="border: 0" alt=""></a></td>
EOD;
}
}
}
echo "</tr>";
}
echo "</table>";
與此問題無關;如果您將用戶輸入(GET params,POST數據,任何內容)放入您的SQL查詢中,他們可以根據需要修改該查詢。這是一個嚴重的安全漏洞,你應該立即修復。 [MySQLi準備語句](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)。 –