2017-03-04 6 views
0

Ich habe drei Tabellen:MYSQL Graf wo aktiv über Tabellen

person 
----------- 
person_id, active 

person_team 
----------- 
person_id, team_id, active 

team 
----------- 
team_id, active 

Ich mag würde die Zählung auf teams von jedem person zu bekommen, wo active in jeder Tabelle ist wahr.

Bisher habe ich:

SELECT t.id, t.title, t.created_timestamp, COUNT(p_t.tag_id) AS count 
FROM team t 
LEFT JOIN 
    person_team p_t ON p_t.team_id = t.id AND p_t.active = 1 
WHERE 
    t.active = 1 
GROUP BY t.id 
ORDER BY t.title 

Dies wird die Zählung in dem Team und Person - Team aktiv sind, aber nicht berücksichtigt nicht, ob Person aktiv ist. Sollte ich eine Unterabfrage oder eine andere Art von Join verwenden?

+0

Geben Sie einige Beispieltabellendaten an – Wanderer

+0

Wie können Sie 't.title, t.created_timestamp' auswählen, wenn es nicht in der Gruppe ist? – Utsav

Antwort

1

Sie benötigen die person Tabelle in einem Join hinzuzufügen und eine Spalte aus der Tabelle zu zählen:

SELECT t.id, t.title, t.created_timestamp, COUNT(p.id) AS count 
FROM team t 
LEFT JOIN 
    person_team p_t ON p_t.team_id = t.id AND p_t.active = 1 
LEFT JOIN 
    person p ON p_t.person_id = p.id AND p.active = 1 
WHERE 
    t.active = 1 
GROUP BY t.id 
ORDER BY t.title 
1

sollten Sie eine Innen auf Unter wählen Join verwenden, um die Spalten erhalten nicht in der Gruppe von

select k.id, t.title, t.created_timestamp, k.count from 
( SELECT t.id COUNT(p_t.tag_id) AS count 
FROM team t 
LEFT JOIN 
    person_team p_t ON p_t.team_id = t.id AND p_t.active = 1 
WHERE 
    t.active = 1 
GROUP BY t.id) k 
inner join team t on t.id = k.id