我有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中的所有详细信息。因为它现在循环给我
答案 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)
您有两个选择:
在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
保持当前的sql查询不变,但更改显示表的php循环。在这种情况下,只有在循环查询返回的所有记录后,才打印出包含所有相应电话号码的名称。只需连接循环中的所有电话号码。