PHP:如何在带有条件的foreach中使用foreach?

PHP:如何在带有条件的foreach中使用foreach?,php,mysql,Php,Mysql,我有两个MySQL表,都是通过MySQL连接连接的: 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


我有两个MySQL表,都是通过MySQL连接连接的:

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代码。 但是我看不出答案,请给我一个如何改变它的提示。
谢谢

如果我猜对了,猜猜一个简单的“如果”就能解决你的问题

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查询中处理它,使用一个

猜测一个简单的if可以解决您的问题,如果我正确的话

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查询中处理它,您可以使用以下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

它将根据您的要求给出结果。

您可以使用以下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

它将根据您的要求给出结果。

您为什么不尝试更改查询

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
}

你为什么不试着改变你的疑问呢

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
}

看起来您只想在tableA的最后一行回显整个tableB。如果到达表A的最后一行,则运行内部foreach。有一些方法可以测试:
行数
等等。你的帖子中有太多的伪代码。试着发布一些真实的东西,而不仅仅是虚假的。您可以从真正的mysql查询开始。看起来您只想在tableA的最后一行回显整个tableB。如果到达表A的最后一行,则运行内部foreach。有一些方法可以测试:
行数
等等。你的帖子中有太多的伪代码。试着发布一些真实的东西,而不仅仅是虚假的。您可以从真正的mysql查询开始。我喜欢让mysql为您完成所有工作:)我喜欢让mysql为您完成所有工作:)我知道这只是一些简单的php代码,顺序正确;-)谢谢我知道这只是一些顺序正确的简单php代码;-)谢谢