左联接两个表并获取第二个表中的记录数

时间:2019-03-20 07:22:28

标签: php mysql

我有两个表,第一个表包含模块列表,第二个表包含模块映射表。

我需要从第一个“模块”表中获取所有记录以及第二个映射表中具有role_id = 25的模块映射ID的对应计数

我使用了以下代码

SELECT 
  `m`.`title`, 
  `m`.`id`, 
  CASE WHEN map.role_id =25 THEN 1 ELSE 0 END as counter 
FROM `z6wpx_modules` as `m` 
LEFT JOIN `z6wpx_users_module_map` as `map` ON `map`.`module_id` = `m`.`id` 
GROUP by m.id 

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以使用COUNT()。例如:

SELECT 
  `m`.`title`, 
  `m`.`id`, 
   COUNT(*) as counter
FROM `z6wpx_modules` as `m` 
LEFT JOIN `z6wpx_users_module_map` as `map` ON `map`.`module_id` = `m`.`id` 
WHERE map.role_id = 25
GROUP BY m.id, m.title

或者您可以使用SUM()函数来计算所有角色的人数

SELECT 
  `m`.`title`, 
  `m`.`id`, 
  SUM(CASE WHEN map.role_id = 25 THEN 1 ELSE 0 END) as counter 
FROM `z6wpx_modules` as `m` 
LEFT JOIN `z6wpx_users_module_map` as `map` ON `map`.`module_id` = `m`.`id`   
GROUP BY m.id, m.title

答案 1 :(得分:0)

子查询会帮助

SELECT 
`m`.`title`, 
`m`.`id`, 
(select COUNT(*) from `z6wpx_users_module_map` as `subMap` where 
`subMap`.`module_id`=`m`.`id` ) as counter
FROM `z6wpx_modules` as `m` 
LEFT JOIN `z6wpx_users_module_map` as `map` ON `map`.`module_id` = `m`.`id` 
WHERE map.role_id = 25
GROUP BY m.id, m.title