Есть две таблицы
table1
+----+----------+--------+-------------+----------+----------+----------+------------+
| id | address | office | fio | counter1 | counter2 | counter3 | date |
+----+----------+--------+-------------+----------+----------+----------+------------+
| 1 | Ленина 3 | 65 | Иванов И.И. | 1678 | 127 | 246 | 01.01.2024 |
| 2 | Ленина 4 | 18 | Павлов П.П. | 327 | 64 | 346 | 03.01.2024 |
+----+----------+--------+-------------+----------+----------+----------+------------+
table2
+----------+--------+----------+---------+
| address | office | counter | num |
+----------+--------+----------+---------+
| Ленина 3 | 65 | counter1 | c000001 |
| Ленина 3 | 65 | counter2 | c000002 |
| Ленина 3 | 65 | counter3 | c000003 |
| Ленина 4 | 18 | counter1 | c000004 |
| Ленина 4 | 18 | counter2 | c000005 |
| Ленина 4 | 18 | counter3 | c000006 |
+----------+--------+----------+---------+
Нужно выгрузит их в файл csv в таком виде
+----------+--------+-------------+----------+-------+---------+------------+
| address | office | fio | counter | value | num | date |
+----------+--------+-------------+----------+-------+---------+------------+
| Ленина 3 | 65 | Иванов И.И. | counter1 | 1678 | c000001 | 01.01.2024 |
| Ленина 3 | 65 | Иванов И.И. | counter2 | 127 | c000002 | 01.01.2024 |
| Ленина 3 | 65 | Иванов И.И. | counter3 | 246 | c000003 | 01.01.2024 |
| Ленина 4 | 18 | Павлов П.П. | counter2 | 327 | c000004 | 03.01.2024 |
| Ленина 4 | 18 | Павлов П.П. | counter2 | 64 | c000005 | 03.01.2024 |
| Ленина 4 | 18 | Павлов П.П. | counter2 | 346 | c000006 | 03.01.2024 |
+----------+--------+-------------+----------+-------+---------+------------+
Таблицы для примера сокращены, количество столбцов и counter'ов в три раза больше.
Сейчас я загружаю первую таблицу и на php в цикле все собираю каждый раз подгружая данные из второй таблицы. Но это очень долго получается и у пользователя закрадывается сомнение, не завис ли процесс.
Я пробовал объединить их slq запросом
SELECT t1.id, t1.address, t1.office, t1.fio, t1.counter, t1.value, table2.num, t1.date from (
SELECT id, address, office, date, fio, 'counter1' as counter, counter1 as 'value' FROM table1
UNION ALL
SELECT id, address, office, date, fio, 'counter2' as counter, counter2 as value FROM table1
UNION ALL
SELECT id, address, office, date, fio, 'counter3' as counter, counter3 as value FROM table1
) t1
LEFT JOIN table2 ON t1.address = table2.address AND t1.office = table2.office AND t1.counter = table2.scetchik
WHERE (t1.date BETWEEN '2021-02-01' AND '2021-02-25') AND t1.value != 0;
но база также долго думает, да и как правильно поместить этот запрос в laravel.
Может есть у кого элегантное решение задачи?