1 голос
 
706 просмотров
7.09.2018 / 20:32  Aladdin

Получение значений из разных таблиц

Всем привет. Передо мною стоит вот такая задачка: есть три таблицы Contracts, Pays и BindedWorkers.
Contracts
contract_id | ....

Pays
pay_id | contract_id | ...

BindedWorkers
bind_id | contract_id | worker_id | ...

то есть Pays и BindedWorkers хранят в себе данные привязанные к конкретному Contract'у

Contracts
contract_id | ....
10

Pays
pay_id | contract_id | amound | ...
0 10 84000
1 10 12000
2 10 325000
3 24 67000

Workers
worker_id | name | job ...
0 Салим 0
1 Алеша 0
2 Сергей 1
3 Олег 1

BindedWorkers
bind_id | contract_id | worker_id | ...
0 10 0
1 10 1
2 10 2
3 10 3

Вообщем нужно сделать такой запрос получить вот этот результат

Contracts.contract_id | sum(Pays.amound) | {*get Workers.name with BindedWorkers.worker_id where job = 0*} | {*get Workers.name with BindedWorkers.worker_id where job = 1*}
10 488000 Салим, Алеша Сергей, Олег

Как это можно сделать?
Ответы
 
3 голоса
 
# 9.09.2018 / 12:39  Koenig
  1. SELECT
  2.     contracts.id, group_concat(workers.name, workers.job) as names,
  3.     (SELECT sum(amound) FROM `pays` WHERE contract_id = contracts.id) as sum
  4. FROM `contracts`
  5.     join bindedworkers on contracts.id = bindedworkers.contract_id
  6.     join workers on bindedworkers.worker_id = workers.id
  7. where contracts.id = 10
Изм. Koenig от 9.09.2018 / 12:43

22.png (18.69 кб.)
Всего: 1

Реклама

Мы в соцсетях

tw tg yt gt