есть следующие таблицы
mysql> describe properties;
+----------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| agent_id | int(11) | YES | MUL | NULL | |
...
| created_at | datetime | NO | | NULL | |
| updated_at | datetime | NO | | NULL | |
+----------------------+--------------+------+-----+---------+----------------+
mysql> describe property_owners;
+-------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| property_id | int(11) | YES | MUL | NULL | |
| owner_id | int(11) | YES | MUL | NULL | |
| created_at | datetime | NO | | NULL | |
| updated_at | datetime | NO | | NULL | |
+-------------+----------+------+-----+---------+----------------+
примечание: owner_id здесь это fk на следующею таблицу
mysql> describe people;
+----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| notes | text | YES | | NULL | |
| person_role_id | int(11) | YES | MUL | NULL | |
| created_at | datetime | NO | | NULL | |
| updated_at | datetime | NO | | NULL | |
+----------------+--------------+------+-----+---------+----------------+
mysql> describe phones;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| number | varchar(255) | YES | | NULL | |
| person_id | int(11) | YES | MUL | NULL | |
| created_at | datetime | NO | | NULL | |
| updated_at | datetime | NO | | NULL | |
+------------+--------------+------+-----+---------+----------------+
Нужно одним запросом окромя всех данных с таблицы properties собирать данные (имя и телефоны) всех ее owner`ов.
вот пример (кусками) как я сделал для агента
properties = Property.scoped.select(
<<-QUERY
properties.*,
...
people.name AS agent_name,
GROUP_CONCAT(phones.number SEPARATOR ', ') as agent_phone,
QUERY
)
...
.joins('LEFT JOIN people ON properties.agent_id = people.id')
.joins('LEFT JOIN phones ON people.id = phones.person_id')
.group('phones.person_id')
...
.order('created_at DESC')
Вся сложность для меня в том что owner`ов можеть быть несколько и у каждого может быть разное количество телефонов (или даже его не быть)
было бы неплохо получить данные о owner`ах как 1 отдельный столбик в таком виде
mary - 123456, 234567; john - 0987654; robert - 112233, 223344, 334455