@ylebedev

Как грамотно составить Mysql Count и правильный запрос к базе включая 3 таблицы?

MYSQL + PHP

Есть 2 таблицы.

1. Оказанные услуги (350 000 записей)
| id | id_uslugi | id_rabotnik | usluga_okazana
| 1 | 2 | 3 | 1

2. Справочник по услугам (500 записей)
(там же в таблица, справочник по Работникам - общая таблица справочников такая большая)
| id | name | category |
| 2 | прибить полку | usluga |
| 3 | Василий | workers |

Подскажите как лучше и грамотно написать запрос результатом которого будет:
нужно узнать количество (сколько) Василий выполнил каждой услуги из справочника, если Василий не делал определенной услуги - 0. то выводить услугу не нужно.

т.е.
Василий
Уборка снега - 3 раза
Повесил картину - 4 раза
Уборка помещения - 0 (не нужно, не показывать)

Петрович
Уборка снега - 1 раза
Повесил картину - 55 раза
Уборка помещения - 233

Вся сложность у меня, что
Василиев = 500
Услуг = 200
А отметках об исполнении = 350 000 строк

Все сделано на Count() - слышал, что оно очень грузит базу, да так и есть.
Можно ли выполнить данный запрос без Count ?


Текущие мои запросы стыдно показывать, очень вешают сервер.
  • Вопрос задан
  • 2503 просмотра
Пригласить эксперта
Ответы на вопрос 2
mgyk
@mgyk
Убедитесь, что у вас стоит индекс по двум полям сразу (job_id, worker_id => id_uslugi , id_rabotnik) Запрос на такой небольшой таблице должен выполняться достаточно быстро
SELECT c.name, b.name, count(*) from unslugi as a 
     left join info as b on a.job_id=b.id 
     left join info as c on a.worker_id=c.id 
WHERE a.usluga_okazana=1 
GROUP BY a.job_id, a.worker_id;
Ответ написан
taliban
@taliban
php программист
group by id, id_uslugi вам должно помочь, каунт в таком случае вернет сгрупированные суммы
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы