用于替换PHP循环的MYSQL Query语句

时间:2011-07-08 15:19:02

标签: php mysql multidimensional-array

假设我有以下表格:

  • projects(project_id,project_name)
  • 文件(document_id,document_name ,project_id)

这是一种自上而下的层次结构,我使用select语句和循环来生成嵌套数组:

$result_array = array();
$projects = mysql_query(' SELECT * FROM projets') ;
$i = 0 ;
while( $row_proj = mysql_fetch_assoc($projects)  )
{
   $result_array[$i] = $row_proj ; 
   $documents = mysql_query('SELECT * FROM documents WHERE project_id='.$row['project_id']);
   $doc_res = array();
   while( $row_doc = mysql_fetch_assoc($documents) 
   { 
       $doc_res[] = $row_doc;
   }
   $result_array[$i]['documents'] = $row_doc ; 
   $i++;
}
.. and so on 

结果是nesteed数组,所以在视图中我可以打印它:

foreach( $projects as $project )
{
  echo $project['project_name'];
  foreach( $project['documents'] as $document )
  {
     echo ..
  }
}

我如何使用SQL语句或任何其他东西使用简单的扁平循环生成这个,这种方式似乎不是最好的,有时我使用连接但它不生成嵌套数组之类的东西。

1 个答案:

答案 0 :(得分:2)

如果我理解你想要实现的目标,我会这样做:

SELECT * FROM documents 
INNER JOIN projects ON projects.id = documents.project_id 

然后遍历所有文档,通过project_id和PHP将它们分组到数组中。您将再次有一个查询。可以做MySQL循环,但宁可做一件丑陋的事情,对于上面的例子,它不会给你带来任何好处。