2012-08-12 54 views
0

假設我有兩個相關的表設置類似於: table_1:person_id,name; table_2:account_id,person_id,account_type,balance;php/mysql遞歸顯示相關表的相關記錄

我要顯示這樣的結果:

(A)爲person_id - 名稱: (一)ACCOUNT_TYPE - 平衡, (一)ACCOUNT_TYPE - 平衡, (一)ACCOUNT_TYPE - 平衡

(b)爲person_id - 名稱: (b)中ACCOUNT_TYPE - 平衡

(C)爲person_id - 名稱: (c)中ACCOUNT_TYPE - 平衡, (c)中ACCOUNT_TYPE - 平衡


以下是我到目前爲止(我不確定是否應該在2個查詢中完成它,或者只是1個連接的查詢)也是$ where1和$ search是用戶輸入搜索字段,它們目前已經在處理這一頁。和$ Y是我在傳遞變量愚蠢的嘗試,但我不認爲這是一個正確的解決方案,我想要做的事:

$q = "SELECT person_id, 
FROM table_1 WHERE $where1 LIKE '$search%'"; 
$r = @mysqli_query ($dbc, $q); 

$q2 = "SELECT person_id, balance, account_type 
FROM accounts WHERE person_id LIKE '$y%'"; 
$r2 = @mysqli_query ($dbc, $q2); 

while($row = mysqli_fetch_array($r)) { 
    echo $row['person_id']. " - " .$row['name']. ":"; 
    $y = $row['person_id']; 
    echo "</br>"; 
     while($row = mysqli_fetch_array($r2)) { 
     echo $row['account_type']. " - " .$row['balance'] ."</br>"; 
     }  
    echo "</br>"; 
    } 

目前這款顯示:

(A)爲person_id - 名稱: 的(a)ACCOUNT_TYPE - 平衡 的(a)ACCOUNT_TYPE - 平衡 的(a)ACCOUNT_TYPE - 平衡 (b)中ACCOUNT_TYPE - 平衡 (c)中ACCOUNT_TYPE - 平衡 (c)中ACCOUNT_TYPE - 平衡

( B)person_id - 名字:

(C)爲person_id - 名稱:


我假設而內的,而這是將工作的方式,但我不知道究竟如何去做。而且,這個東西上面顯然有代碼,但是這些東西都可以工作,並且主要與打開數據庫連接和搜索表單有關。

此外,我在這裏包含的代碼是示例代碼,可能是另一種方式的錯誤,但我主要只是尋找一個關於如何構建查詢和遞歸來顯示數據的整體思路我希望它顯示的方式。

在此先感謝您提供的所有幫助。

回答

0

我喜歡做的是取得這樣的數據,並把它放入一個多維數組,它適合我想輸出的顯示。這取決於您擁有多少數據,但巨大的數組可能會導致問題。我會做一個查詢,order by person_id,然後你想要的任何其他數據。然後循環查詢並使用第一個數組鍵來跟蹤person_id

$output_ary = array(); 
while($row = mysqli_fetch_array($r)) { 
    if (!array_key_exists($output_ary, $r['person_id']) { 
     $output_ary[$r['person_id']] = array(); 
    } 
    $output_ary[$r['person_id']][] = $r; // or a new array with the data elements you want 
} 

然後你可以使用嵌套的循環foreach輸出數據或什麼的。可能不是最優雅或有效的解決方案,但對於較小的數據結果,我發現將數據放入與我想顯示的方式相匹配的結構對我來說很合適。

+0

此外,如果您尚未在代碼中的其他位置執行此操作,則應在清除發佈的數據之前在查詢中使用它以防止SQL注入。 – Revent 2012-08-14 04:18:21

+0

我覺得我應該明白這一點,但有些東西只是不點擊而已。什麼是「如果」在做什麼?這是幹什麼的:「$ output_ary [$ r ['person_id']] [] = $ r;」 ?該foreach(es)去哪裏?我已經做了一些關於我如何工作的假設,並試圖以幾種不同的方式將其應用到我的代碼中,但卻無法獲得我需要的結果。非常感謝您花時間回答這個問題,並再次感謝您能否給我更多幫助。 – bseaworthy 2012-09-03 08:05:39

+0

好吧,我玩了一點,並提出了一個更不優雅的解決方案,似乎在這一點上工作。所以這已經不再那麼緊迫了,但我仍然很想看看究竟做了什麼,因爲我認爲它在將來可能會有用。再次感謝。 – bseaworthy 2012-09-03 08:28:00