好的。这很奇怪,我正在使用 group_by 并加入
这是我的查询。
SELECT *
FROM (`emp_skills` ES)
INNER JOIN `employee` E ON `E`.`employee_id`= `ES`.`employee_id`
INNER JOIN `ml_skill_type` MLST ON `MLST`.`skill_type_id` = `ES`.`ml_skill_type_id`
INNER JOIN `employment` ET ON `ET`.`employee_id` = `E`.`employee_id`
INNER JOIN `position_management` PM ON `PM`.`employement_id`=`ET`.`employment_id` AND PM.current=1
INNER JOIN `ml_designations` MLD ON `MLD`.`ml_designation_id`=`PM`.`ml_designation_id`
LEFT JOIN `assign_job` AJ ON `AJ`.`employee_id` = `E`.`employee_id`
LEFT JOIN `ml_projects` MLP ON `MLP`.`project_id` = `AJ`.`project_id`
GROUP BY `E`.`employee_id`
这是我到目前为止得到的结果。
但是如果我用这个。
SELECT COUNT(*) AS numrows
那么我的查询就变成了
SELECT COUNT(*) AS numrows
FROM (`emp_skills` ES)
INNER JOIN `employee` E ON `E`.`employee_id`= `ES`.`employee_id`
INNER JOIN `ml_skill_type` MLST ON `MLST`.`skill_type_id` = `ES`.`ml_skill_type_id`
INNER JOIN `employment` ET ON `ET`.`employee_id` = `E`.`employee_id`
INNER JOIN `position_management` PM ON `PM`.`employement_id`=`ET`.`employment_id` AND PM.current=1
INNER JOIN `ml_designations` MLD ON `MLD`.`ml_designation_id`=`PM`.`ml_designation_id`
LEFT JOIN `assign_job` AJ ON `AJ`.`employee_id` = `E`.`employee_id`
LEFT JOIN `ml_projects` MLP ON `MLP`.`project_id` = `AJ`.`project_id`
GROUP BY `E`.`employee_id`
这是我得到的奇怪结果,我想我应该只得到 1 列和 1 行来显示总行数。 但这就是我得到的。
如何修复这个查询?
<小时/>如果我无法解释我的问题,我很抱歉..
这是注释掉 group_concat 和 group_by 的查询
SELECT
`E`.`employee_id`,
`E`.`full_name`,
`MLD`.`designation_name`#,
#GROUP_CONCAT(DISTINCT MLP.project_title) AS Projects,
#GROUP_CONCAT(DISTINCT MLST.skill_name) AS EmployeeSkills
FROM (`emp_skills` ES)
INNER JOIN `employee` E ON `E`.`employee_id`= `ES`.`employee_id`
INNER JOIN `ml_skill_type` MLST ON `MLST`.`skill_type_id` = `ES`.`ml_skill_type_id`
INNER JOIN `employment` ET ON `ET`.`employee_id` = `E`.`employee_id`
INNER JOIN `position_management` PM ON `PM`.`employement_id`=`ET`.`employment_id` AND PM.current=1
INNER JOIN `ml_designations` MLD ON `MLD`.`ml_designation_id`=`PM`.`ml_designation_id`
LEFT JOIN `assign_job` AJ ON `AJ`.`employee_id` = `E`.`employee_id`
LEFT JOIN `ml_projects` MLP ON `MLP`.`project_id` = `AJ`.`project_id`
#GROUP BY `E`.`employee_id`
LIMIT 25
这是它的结果。 上图中有16条记录,计数即可显示良好。但如果使用 group_concat 和 group_by 我会得到 6 条记录。
我真正想要的,我不想要重复的员工姓名,而是想要逗号分隔的值等。
但如何知道从 mysql 返回了多少行查询。
最佳答案
如果您想知道总数,则需要删除末尾的GROUP BY E.employee_id
。现在,您获得的是每个不同 employee_id
的聚合计数,而不是总计数。
关于mysql 从连接记录中获取总行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27378195/