2015-09-04 73 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 
}