2016-06-09 20 views
1

Ich habe zwei TabellenMysql Anfrage von zwei Tabellen mit Zählen

**users** 

id name 
1 Name1 
2 Name2 

**tasks** 

id user_id title 
1 1  Task1 
2 1  Task2          
3 2  Task3 

Meine Anfrage:

SELECT 
    U.*, 
    COUNT(T.id) AS tasks_total 
FROM 
    `#__users` AS U 
LEFT JOIN 
    `#__tasks` AS T 
ON 
    U.id = T.user_id 

Ich denke, etwas falsch hier ...

I wan't Ergebnisse zu erhalten :

id name tasks_total 
1 Name1 2 
2 Name2 1 

Danke!

Antwort

1

Sie haben vergessen zu Gruppe das Ergebnis von id

SELECT 
    U.*, 
    COUNT(T.id) AS tasks_total 
FROM 
    `#__users` AS U 
LEFT JOIN 
    `#__tasks` AS T 
ON 
    U.id = T.user_id 
group by U.id 

demo on sqlfiddle

0

Sie Mischlinienfunktionen und Aggregatfunktionen. Eine Möglichkeit besteht darin, die Aggregation in einer Unterabfrage durchzuführen:

SELECT 
    U.*, 
    tasks_total 
FROM 
    `#__users` AS U 
LEFT JOIN 
    (SELECT user_id, COUNT(*) AS tasks_total 
    FROM  `#__tasks` 
    GROUP BY user_id) AS T 
ON 
    U.id = T.user_id