2012-05-05 63 views
0

進出口尋找用於此類查詢的通用解決方案:LEFT JOIN成嵌套陣列在PHP

SELECT * FROM A 
LEFT JOIN B on A.ID = B.FK_ID 
SELECT * FROM A 

LEFT JOIN B on A.ID = B.FK_ID 
LEFT JOIN C on B.ID = C.FK_ID 

把它在一個數組,所以聯接的記錄將是在嵌套陣列。這很複雜,不是嗎?我只有查詢和獲取所有記錄

編輯:

它通常會返回

A.col1 A.col2 A.col3 B.col1 B.col2 B.col3 

如果A具有4行和2條B的連接到A,A將有5行。相反,我想這樣:

A.col1 A.col2 A.col3 B (array) 
+0

我很抱歉,但什麼是你的問題嗎?什麼是「加入記錄」?你如何確定你的查詢返回的列是嵌套的,以及深度是多少?在兩個表中都有一列。 – Ben

回答

1

當你構建的源數組稍有不同時,你可以使用這個函數。

這是一個重複的(http://stackoverflow.com/questions/8431463/more-efficient-hierarchy-system/8431551)(PARENT_ID,身份證,職稱):

$q = mysql_query("SELECT id, parent_id, name FROM categories"); 
while ($r = mysql_fetch_row($q)) { 
    $names[$r[0]] = $r[2]; 
    $children[$r[0]][] = $r[1]; 
} 

function render_select($root=0, $level=-1) { 
    global $names, $children; 
    if ($root != 0) 
    echo '<option>' . strrep(' ', $level) . $names[$root] . '</option>'; 
    foreach ($children[$root] as $child) 
    render_select($child, $level+1); 
} 

echo '<select>'; 
render_select(); 
echo '</select>';