Php Mysql查询以获取总儿童数?

Php Mysql查询以获取总儿童数?,php,mysql,Php,Mysql,我有一个4个表,其中我需要从数据库中获取用户信息、状态名称、分支名称和孩子总数 我使用下面的sql SELECT `user_id` , `user_name` , state_name, branch_name FROM `user` LEFT JOIN state ON state_id = user_state_id LEFT JOIN branch ON branch_id = user_branch_id 但我还需要得到每个用户的孩子数,所以我使用了下面的查询 SELECT

我有一个4个表,其中我需要从数据库中获取用户信息、状态名称、分支名称和孩子总数

我使用下面的sql

SELECT  `user_id` ,  `user_name` , state_name, branch_name
FROM  `user` 
LEFT JOIN state ON state_id = user_state_id
LEFT JOIN branch ON branch_id = user_branch_id
但我还需要得到每个用户的孩子数,所以我使用了下面的查询

SELECT  `user_id` ,  `user_name` , state_name, branch_name, count(child_id)
FROM  `user` 
LEFT JOIN state ON state_id = user_state_id
LEFT JOIN branch ON branch_id = user_branch_id
LEFT JOIN child on parent_id = user_id  group by user_id

我需要问一个问题,在整个查询中使用group by进行计数是否可以,这是否会影响来自此查询的联接的数据。由于您是按用户id分组的,因此每个用户id只在输出中有一行。让我们来看看第一张桌子的状态。如果用户只有一个状态,那么GROUPBY不会引起任何问题,因为这一行将在输出中。分支机构也是如此

对于最后一个表“child”,如果用户有多个child(显然是根据您的查询),则输出中将只显示一行。当您在“选择”中单独使用计数(child_id)时,此计数将单独出现在输出中。如果从“child”表中选择“count”以外的任何其他列,则输出中将仅包含第一个子项的值


只要在state表和branch表中每个用户只有一行,输出就不会受到GROUP by的影响。

连接中涉及三个表。由于您是按用户id分组的,因此每个用户id只在输出中有一行。让我们来看看第一张桌子的状态。如果用户只有一个状态,那么GROUPBY不会引起任何问题,因为这一行将在输出中。分支机构也是如此

对于最后一个表“child”,如果用户有多个child(显然是根据您的查询),则输出中将只显示一行。当您在“选择”中单独使用计数(child_id)时,此计数将单独出现在输出中。如果从“child”表中选择“count”以外的任何其他列,则输出中将仅包含第一个子项的值


只要状态表和分支表中每个用户只有一行,输出就不会受组的影响。

使用子查询可能更容易:

SELECT  `user_id` ,  `user_name` , state_name, branch_name
(SELECT count(*) FROM `child` WHERE `parent_id` = `user_id`) as `child_count` 
FROM  `user` 
LEFT JOIN state ON state_id = user_state_id
LEFT JOIN branch ON branch_id = user_branch_id

希望这有帮助

使用子查询可能会更容易:

SELECT  `user_id` ,  `user_name` , state_name, branch_name
(SELECT count(*) FROM `child` WHERE `parent_id` = `user_id`) as `child_count` 
FROM  `user` 
LEFT JOIN state ON state_id = user_state_id
LEFT JOIN branch ON branch_id = user_branch_id
希望这有帮助