2015-09-04 28 views
0


我有兩個MySQL表,無論是通過MySQL的連接JOIN:PHP:如何在具有條件的foreach中進行foreach?

TableA: 
hom_id con_id 
3  4 
5  3 

TableB: 
hom_id con_id hp_id 
3  4  1 
3  4  2 

我的僞PHP代碼:

foreach ($hom as $h) //from TableA 
    echo $h->con_id 
---myidea---  
     foreach ($pro as $p) //from TableB 
      echo $p->hp_id 
     endforeach 
---END--- 
endforeach 

HTML結果我得到的是:

Result HTML Table: 
con_id  hp_id 
3   1 2 
4   1 2 

什麼我想要的是:

result HTML: 
con_id  hp_id 
3   
4   1 2 

我很確定,它只是我必須改變的幾行php代碼。 但我看不到答案,請給我一個提示如何改變它。 謝謝

+0

看起來像你只需要在表A的最後一行呼應整個tableB的。如果達到tableA的最後一行,則運行內部foreach。有測試方法:'row_count'等 –

+1

太多的僞代碼在您的文章。嘗試發佈一些不僅是真實的東西。你可以從你真正的mysql查詢開始。 – Alex

回答

2

猜一個簡單的如果能解決你的問題,如果我得到了正確的。

foreach ($hom as $h) {//from TableA 
    echo $h->con_id 
    foreach ($pro as $p) { //from TableB 
     if ($p->con_id == $h->con_id) { 
      echo $p->hp_id 
     } 
    } 
} 

或者,也許你應該處理它在您的SQL查詢,使用LEFT JOIN

+0

我知道這只是一些簡單的PHP代碼,正確的順序;-)謝謝! – fips123

2

您可以使用下面的SQL語句:

select a.con_id,group_concat(b.hp_id SEPARATOR " ") as hp_id 
from tableA a 
left join tableB b on(a.hom_id=b.hom_id and a.con_id=b.con_id) 
group by a.hom_id,a.con_id 

它會給結果按您的要求。

+0

我喜歡它,當你可以讓MySQL爲你做所有的工作:) – samrap

1

你爲什麼不嘗試改變你的查詢?

SELECT A.con_id, B.hp_id 
FROM A 
LEFT JOIN B ON(A.con_id = B.con_id) 

,並做了簡單的foreach

foreach($result as $res) 
{ 
    echo $res->con_id, $res->hp_id 
}