2011-07-08 66 views
0

假设我有如下表:MySQL查询statment取代PHP循环

  • 项目(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 statment或任何其他东西产生这种使用简单的平面环,这种方式似乎不是最好的,有时我使用连接,但它不会生成嵌套数组等东西。

回答

2

如果我理解你想实现我会做的事:

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

然后通过所有的文件,他们组阵列通过PROJECT_ID用PHP迭代。你将再次有一个查询。有可能做MySQL循环,但宁可做一个丑陋的事情,对于上面的例子,它不会给你任何好处。

+0

我认为现在的问题更加清楚... – shox