имеет смысл сначала довести SQL запрос до нормального состояния, а потом уже переходить к апи.
Итого - есть пользователи, есть собственность, есть транспорт.
1. Есть определенная непонятность - если мы сгруппировали по юзеру, у него есть несколько объектов собственности во владении и несколько транспортных средств - сколько строк Вы хотите получить в итоге?
SELECT user.*,
GROUP_CONCAT(DISTINCT property.name ORDER BY property.name ASC SEPARATOR ', ') AS propertys,
....
GROUP BY user.identifier ;
Это должно дать список собственности, но вот транспорт так легко не делается - там 3 поля, это уже на грани написания хранимой процедуры
2. Достаточно выводить только venicle_plate при условии если:
WHERE venicle_job is null AND (venicle_type is null or venicle_type='car')
в этом случае group_concat справится.
Навскидку, можно еще вложенными подзапросами сделать:
SELECT id,
(SELECT GROUP_CONCAT(DISTINCT name ORDER BY name ASC SEPARATOR ', ') FROM owned_properties WHERE users.identifier = owned_properties.owner GROUP BY owned_properties.owner ) as property,
(SELECT GROUP_CONCAT(DISTINCT plate ORDER BY plate ASC SEPARATOR ', ') FROM owned_vehicles
WHERE job is null AND (type is null or type='car') AND
users.identifier = owned_vehicles .owner GROUP BY owned_vehicles .owner ) as venicle
FROM users;
опять же, сильно похоже, что тут удобней будет документоориентированная noSQL база данных
примера БД под рукой нет, чтобы запросы отладить, но с виду жизнеспособно.