2014-12-09 1 views
0

ok. 그것의 이상한, 나는 group_by를 사용하고 결합하고있다mysql은 조인 된 레코드의 총 행 수를 얻습니다.

여기있다 질문이있다.

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` 

여기까지의 결과가 있습니다. enter image description here

하지만 이것을 사용하면.

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 열 및 난 나에게 총 행을 보여 추측 행을 받아야 내가 무엇입니까 이상한 결과입니다. 하지만 여기는 내가 얻는 것입니다. enter image description here

이 쿼리를 수정하는 방법 ?? 나는 여기에 내 질문에 ..

이 주석 GROUP_CONCAT와 쿼리가 설명하고

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 

을 GROUP_BY와없는 경우


메신저 미안의 결과입니다. enter image description here 위의 이미지에는 16 개의 레코드가 포함되어 있습니다. group_concat 및 group_by를 사용하면 6 개의 레코드가 생성됩니다. 내가 실제로 원하는

enter image description here

, 내가 대신 내가 쉼표 등 값

하지만 어떻게 MySQL의에서 반환되는 행 수 쿼리 알고 알고를 구분하려면, 반복 직원 이름을 돼요.

답변

1

총 개수를 알아 보려면 GROUP BY E.employee_id을 제거해야합니다. 현재 총 개수가 아닌 employee_id이라는 별개의 집계 된 개수가 발생하고 있습니다.

+0

하지만 16 레코드를 표시하는 동안 나는 그룹별로 6 레코드를 얻습니다. ?? 그래서 내가 페이지 번호 매김에 사용되는 행의 번호를 얻고 싶습니다. –

+0

COUNT (*)없이 16 개의 recors가 COUNT (*)가 '16'이라는 내용으로 한 행을 줄 것입니까? –

+0

예. 사실,하지만 난 16 레코드 싶지 않아 ?? 나는 왜 내가 group_by와 group_concat을 사용하고 있는지 반복 할 필요가 없다는 것을 의미 하는가? 그러면이 문제를 어떻게 해결할 수 있습니까? –

관련 문제