2011-07-08 86 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