BG Development


  Reply to this topicStart new topicStart Poll

> MySQL select join multiple table and SUM
TrustHavic
Публикувано на: 28-11-2017, 20:38
Quote Post



Име: Станимир
Група: Потребител
Ранг: Редовен член

Мнения: 314
Регистриран на: 30.04.14



Имам следната заявка. Целта е да извадя данни от различни таблици, който да продредя в таблица/графика за всеки ред от `users`. Проблема е че 1) не вади правилен резултат, 2)не винаги това което го има в task(като потребители) го има и в `calendar`, 3) трябва да изкарам информацията за определен период от време (във всяка от таблиците към всеки ред има и datetime колона)
Стигнах до тук, но не работи правилно с два join-a, а може би и повече(със сигурност ще се наложи за напред)
SQL
SELECT
CONCAT(u.name,' ',u.family) as bName,
u.id, COUNT( * ) AS `total` ,
SUM(CASE WHEN (t.type = '1' AND t.status = '1') THEN 1 ELSE 0 END ) active,
SUM(CASE WHEN (t.type = '2' AND t.status = '1') THEN 1 ELSE 0 END ) unActive,
SUM(CASE WHEN c.status = '1' THEN 1 ELSE 0 END ) inspections
FROM `users` u
JOIN task t ON u.id = t.bid
JOIN `calendar` c ON u.id = c.bid
GROUP BY u.id


PMEmail Poster
Top
TrustHavic
Публикувано на: 29-11-2017, 00:43
Quote Post



Име: Станимир
Група: Потребител
Ранг: Редовен член

Мнения: 314
Регистриран на: 30.04.14



Мисля че сам намерих решение на проблема
SQL
SELECT
CONCAT(u.name,' ',u.family) as bName, c.x, t.y, tx.z
FROM users u
LEFT JOIN (SELECT bid, COUNT(*) x FROM `calendar` WHERE `status` = '1' GROUP BY bid) c ON u.id = c.bid

LEFT JOIN (select bid, count(*) y FROM task WHERE `status` = '1' and `type` = '1' GROUP BY bid) t ON u.id = t.bid

LEFT JOIN (select bid, count(*) z FROM task WHERE `status` = '1' and` type` = '2' GROUP BY bid) tx ON u.id = tx.bid

ORDER BY name ASC
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2015 | BG Development | All Rights Reserved
RSS 2.0