Цикл Foreach, но печатать один раз с несколькими значениями

Итак, у меня в базе данных есть таблица с именем "Clients" и еще одна с именем "Pets". Они связаны ассоциативной таблицей, что означает, что "Clients" может иметь два "Pets".

Я использую цикл FOREACH для отображения моего клиента и домашних животных, но когда у клиента много домашних животных, мой цикл foreach печатает все, сколько у клиента есть домашних животных.

см. здесь

вот моя foreach петля

foreach ($files as $file) :
echo $file['address'];
endforeach

Моя проблема в том, что я хочу, чтобы все отображалось нормально, кроме "pets" (<?= $file['petName']; ?>), и вижу, что у клиента есть 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'

php
person pierre273    schedule 10.09.2020    source источник
comment
Пожалуйста, опубликуйте свой SQL-запрос с вопросом   -  person Slava Rozhnev    schedule 10.09.2020
comment
Если это актуально. Если это не так, удалите тег ‹sql›.   -  person jarlh    schedule 10.09.2020
comment
@SlavaRozhnev Я прав, владелец - это моя ассоциативная таблица, а clientdocs - это другая таблица, которая нам не нужна для этой проблемы.   -  person pierre273    schedule 10.09.2020
comment
Не могли бы вы показать репрезентативную выборку $files — используйте var_export($files)   -  person jibsteroos    schedule 10.09.2020


Ответы (2)


Вы можете изменить запрос, например:

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';

Это не решение, но может дать вам представление о лучшем решении.

person Slava Rozhnev    schedule 10.09.2020

Отлично, это то, что я хотел, большое спасибо!

здесь измененный код:

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'
person pierre273    schedule 10.09.2020