Php Foreach循环,但使用多个值打印一次

Php Foreach循环,但使用多个值打印一次,php,Php,因此,我的数据库中有一个名为“Clients”的表和另一个名为“Pets”。 它们由一个关联表链接,这意味着一个“客户机”可以有两个“宠物” 我正在使用一个FOREACH循环来显示我的客户机和宠物,但是当客户机有很多宠物时,我的FOREACH循环会打印所有内容,就像客户机有宠物一样多 这是我的foreach循环 foreach ($files as $file) : echo $file['address']; endforeach 我的问题是,我希望所有东西都能正常显示,除了“pets”(

因此,我的数据库中有一个名为
“Clients”
的表和另一个名为
“Pets”
。 它们由一个关联表链接,这意味着一个
“客户机”
可以有两个
“宠物”

我正在使用一个
FOREACH
循环来显示我的客户机和宠物,但是当客户机有很多宠物时,我的FOREACH循环会打印所有内容,就像客户机有宠物一样多

这是我的
foreach
循环

foreach ($files as $file) :
echo $file['address'];
endforeach
我的问题是,我希望所有东西都能正常显示,除了
“pets”
)之外,并确保客户端有2只宠物

谢谢你的帮助

我的SQL查询

SELECT *
FROM clients
LEFT JOIN owners ON owners.idClients = clients.idClients
LEFT JOIN pets ON pets.idPets = owners.idPets
LEFT JOIN clientsdocs ON clientsdocs.idClients = clients.idClients
WHERE clients.idClients='$id'

您可以更改查询,如下所示:

SELECT
    clients.*, 
    GROUP_CONCAT(petName) AS petsNames # implode pets names s into 1 string
FROM clients
LEFT JOIN owners ON owners.idClients = clients.idClients
LEFT JOIN pets ON pets.idPets = owners.idPets
LEFT JOIN clientsdocs ON clientsdocs.idClients = clients.idClients
GROUP BY clients.idClients # this is group all client's data in single row
WHERE clients.idClients='$id';

这不是解决方案,但可以为您提供最佳解决方案的想法。

完美,这就是我想要的,非常感谢

下面是修改后的代码:

SELECT *, 
GROUP_CONCAT(DISTINCT petName ORDER BY petName) AS petsNames
FROM clients
LEFT JOIN owners ON owners.idClients = clients.idClients
LEFT JOIN pets ON pets.idPets = owners.idPets
LEFT JOIN clientsdocs ON clientsdocs.idClients = clients.idClients
WHERE clients.idClients='$id'

如果相关,请在SQL查询后附上问题。如果不是,请删除标记。@SlavaRozhnev我编辑了它,“owner”是我的关联表,“clientsdocs”是另一个表,我们不需要它来解决这个问题。您可以展示一个有代表性的
$files
-使用
var\u导出($files)