php - MySQL 连接而不是 "nested while loop"

标签 php mysql loops join

这段代码工作得很好,但我不喜欢循环中的 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/

相关文章:

JavaScript:如何在 for 循环期间跳过数组中的当前项? (继续?)

android - 使用循环将按钮添加到android布局

javascript - 如何通过单击按钮创建表单加载项?

php - ZF2 日志 curl 请求

python - 如何使用 Python 查询 MySQL 数据快照?

sql - mysql语法错误

c# - 如何随时以 "ESC"退出 while 循环/C#

PHP:星级评定系统的概念?

php - 如何从 Magento 中删除意外创建的货件?

php - PDO查询优化