2015-12-10 167 views
1

我在php項目中使用mysql查詢,並且我停留在查詢中。現在我正在使用下面的查詢來獲取form表中的所有項目。獲取相關表中的記錄mysql

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 joinregistration表,但它不工作。

數據結果,我得到現在沒有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

如果您提供了說明您的案例的示例數據,這將有所幫助。 – JRD

+0

@JRD我已更新問題 –

+0

您需要一個'group by'子句來對行進行正確分類。沒有它,'count'聚合函數將只返回1行,所有其他列將有任意值。 – JRD

回答

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. 
+0

我的查詢運行正常,但問題是它在每個列值和零記錄值返回null –

+0

謝謝你的回答,它幫助我找出解決方案,我可以得到數據從'forms'表中只指定一個唯一列,我不必在'group by'語句中給出所有列。你認爲它應該這樣工作,否則我仍然收到錯誤的數據? –

+0

我建議將您的group by子句中的每一列都包含在select中,並且不僅用作聚合函數的參數。我很驚訝MySQL可以讓你做到這一點...我真的不知道它會做什麼。 –