php从一个表到多个表获取数据

时间:2016-10-26 08:47:09

标签: php mysql sql

我有2张桌子A&乙

Table A
       ID             NAME
       1              John
       2              Jack
       3              Mark

Table B
       ID             phone      UserID
       s1             4586         1
       s2             6996         1
       s3             9654         2

他们是一对多的关系(约翰在表2中有2个电话)

我的SQL查询

$sql = 'SELECT * 
                FROM 
                A 
                Join
                B
                ON
                B.USER_ID = A.ID
                WHERE 
                A.ID=:ID';

我的PHP

foreach($vars['GROUPS'] as $row) {


                <tr><th>Name</th><td><?=$row['Name']?></td></tr>
                <tr><th>phone</th><td><?=$row['phone']?></td></tr>


}

我想显示此用户John姓名的电话号码,然后显示表2中的所有详细信息。因为它现在循环给我

2 个答案:

答案 0 :(得分:0)

我不知道我是否理解你的问题。从您的查询中,您为用户John获取两行,一行是“1-John-s1-4586-1”,另一行是“1-John-s2-6996-1”,对吧?并且您只想为该用户包含他的电话号码一行?然后你可以使用GROUP_CONCAT:

SELECT A.*, GROUP_CONCAT(b.phone) FROM
A INNER JOIN B ON A.id = B.UserID
WHERE A.ID=:ID
GROUP BY A.id

有关GROUP_CONCAT函数的更多选项,请参阅MySQL文档:http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat

例如,您可以使用订购或自定义分隔符。

在PHP中,如果要迭代电话号码,可以使用explode()。

答案 1 :(得分:0)

您有两个选择:

  1. 在sql中使用group_concat()函数将用户拥有的所有电话号码连接成一个字符串,并在php中使用与现在使用的几乎相同的循环。

    select a.id, a.name, group_concat(b.phone) as phone from a inner join b on a.id=b.user_id group by a.id, a.name

  2. 保持当前的sql查询不变,但更改显示表的php循环。在这种情况下,只有在循环查询返回的所有记录后,才打印出包含所有相应电话号码的名称。只需连接循环中的所有电话号码。