我在mysql
项目中使用php
查询,但我遇到了疑问。现在我正在使用如下所示的查询来获取form
表中的所有项目。
SELECT `user`.`name` AS `Detail`, `forms`.*
FROM `forms`
INNER JOIN `user` ON user.id = forms.user_id
WHERE ((`forms`.`item_id`=52)
AND (`forms`.`date`='11/28/2015'))
AND (`forms`.`is_deleted`=0)
现在我想在名为records
的结果集中再添加一列,我尝试了以下查询
SELECT `user`.`name` AS `Detail`, `forms`.*, count(registration.id)
FROM `forms`
INNER JOIN `user` ON user.id = user.user_id
Left Outer JOIN registration ON registration.forms_id = forms.id
WHERE ((`forms`.`item_id`=31)
AND (`forms`.`date`="12/12/2015"))
AND (`forms`.`is_deleted`=0)
因此,如果任何表单在registration
表中没有条目记录而不是为此返回0,但我的查询只返回registration
表中至少有1条记录的数据。我也尝试将inner join
用于registration
表,但它不起作用。
我现在得到的数据结果没有count
功能就像这样
Detail id item_id user_id name date
User1 4 15 52 Testing 6 11/28/2015
User2 6 17 55 Testing 2 11/28/2015
User2 3 18 55 Testing 5 11/28/2015
User1 3 18 52 Testing 5 11/28/2015
我想要的是这样的
Detail id item_id user_id name date records
User1 4 15 52 Testing 6 11/28/2015 2
User2 6 17 55 Testing 2 11/28/2015 5
User2 3 18 55 Testing 5 11/28/2015 0
User1 3 18 52 Testing 5 11/28/2015 0
现在我知道如何使用另一个查询和打印结果来获取count
,但是如果我可以在同一个查询中执行此操作,那么我就不必编写单独的查询来获取记录。
谢谢
答案 0 :(得分:1)
您的查询甚至看起来根本不应该运行。如果您将字段与聚合函数混合,则所有裸字段都应位于group by子句中。看起来你所拥有的是正确的,除了缺少group by子句。我不认为你可以在一个组中使用*,所以你必须包括每个字段。类似的东西:
SELECT `user`.`name` AS `Detail`,
`forms`.Col1,
`forms`.Col2,
`forms`.Col3,
... etc.
count(registration.id)
FROM `forms`
INNER JOIN `user` ON user.id = user.user_id
Left Outer JOIN registration ON registration.forms_id = forms.id
WHERE ((`forms`.`item_id`=31)
AND (`forms`.`date`="12/12/2015"))
AND (`forms`.`is_deleted`=0)
group by `user`.`name`,
`forms`.Col1,
`forms`.Col2,
`forms`.Col3,
... etc.