2011-02-02 151 views
0
SELECT v.*, COUNT(a.*) 
FROM vacancies AS v, applications AS a 
WHERE a.vacancy_id = v.id 

基本上我需要一种方法来计算每个空缺对应的应用程序的数量。这个MySQL查询有什么问题

应用程序有空位ID。所以我想从vacancies表中获得空缺,并遍历它们输出具有相同vacancy_id的应用程序数量。

这是正确的做法吗?它说我有一个COUNT(a.*)位的问题。

任何想法?

谢谢。

编辑

好了,我的东西试过组,现在有这样的:

SELECT v.*, COUNT(a.candidate_id) 
FROM vacancies AS v, applications AS a 
WHERE a.vacancy_id=v.id 
GROUP BY v.title 

但它只返回一个结果,因为那里有只有一个应用程序。即使没有任何与空缺有关的应用程序,是否有任何方法可以将空缺表中的所有东西都还原?

回答

1

COUNT是一个组操作。最后需要使用GROUP BY。

编辑 使用左加入

SELECT诉*,COUNT(a.candidate_id) FROM空缺AS诉 LEFT JOIN上a.vacancy_id = v.id 集团作为一个应用程序用V。标题

0

如果你是混合骨料和名称

1

您需要GROUP BY的东西你需要一个GROUP BY条款。添加如

GROUP BY vacancy.somefield 

到查询。见COUNT function reference in MySQL

要选择的,而不是写

WHERE a.vacancy_id = v.id 

你应该使用LEFT JOIN条款的空缺表中的所有成员,:

LEFT JOIN applications ON a.vacancy_id = v.id 

MySQL JOIN documentation

+0

嘿,非常感谢。 :)我编辑了这个问题,我现在有一个问题,它不会选择所有空缺,只有那些与他们有关的应用程序。有任何想法吗? – 2011-02-02 11:53:29

+0

我编辑了我的答案以反映你的第二个问题。 – 2011-02-02 12:03:52

+0

谢谢:)非常感谢 – 2011-02-02 12:27:50

0
SELECT 
    v.id, COUNT(*) 
FROM 
    vacancies AS v, 
    applications AS a 
WHERE 
    a.vacancy_id=v.id 
GROUP BY 
    v.id