这段代码工作得很好,但我不喜欢循环中的 while 循环的想法。
JOINS 是否还有其他更有效的方法?
$region_results = mysql_query("SELECT id,region_name FROM regions WHERE page_id='$page_id' ORDER BY position ASC",$con_web) or die (mysql_error());
while($region_rows=mysql_fetch_array($region_results))
{
$region_id=$region_rows["id"];
$region_name=$region_rows["region_name"];
echo " <li>$region_name\n";
echo " <ul>\n";
$block_results = mysql_query("SELECT id,block_name FROM blocks WHERE region_id='$region_id' ORDER BY position ASC",$con_web) or die (mysql_error());
while($block_rows=mysql_fetch_array($block_results))
{
$block_id=$block_rows["id"];
$block_name=$block_rows["block_name"];
echo " <li>$block_name\n";
echo " <ul>\n";
$object_results = mysql_query("SELECT id,object_name FROM objects WHERE block_id='$block_id' ORDER BY position ASC",$con_web) or die (mysql_error());
while($object_rows=mysql_fetch_array($object_results))
{
$object_id=$object_rows["id"];
$object_name=$object_rows["object_name"];
echo " <li>$object_name</li>\n";
}
echo " </ul>\n";
echo " </li>\n";
}
echo " </ul>\n";
echo " </li>\n";
}
这段代码产生:
<li>Left Content
<ul>
<li>Block 1
<ul>
<li>Object 1</li>
</ul>
</li>
<li>Block 2
<ul>
<li>Object 1</li>
</ul>
</li>
<li>Block 3
<ul>
<li>Object 1</li>
</ul>
</li>
</ul>
</li>
<li>Right Panel
<ul>
<li>Block 1
<ul>
<li>Object 1</li>
<li>Object 2</li>
</ul>
</li>
</ul>
</li>
谢谢。
最佳答案
SELECT b.id AS block_id, b.block_name, o.id, o.object_name
FROM blocks b
JOIN objects o
ON o.block_id = b.id
WHERE b.region_id = '$region_id'
ORDER BY
b.position, b.id, o.position
记录block_id
的值并在它改变时关闭/打开 block 标签。
关于php - MySQL 连接而不是 "nested while loop",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5302515/