2011-10-27 4 views
0

참여 복잡 나는 다음과 MySQL의 쿼리가 :은 MySQL이

SELECT Project.*, `trk_deleted`, `trk_status`, `trk_state` 
    FROM `project` AS `Project` LEFT JOIN `trackline` ON `prj_id` = `trk_project` 
    WHERE `prj_deleted` = '0' GROUP BY `prj_id` ORDER BY `prj_name`; 

이 설명하기 조금 어려운,하지만 기본적으로 내가 프로젝트 여러 Tracklines이 내 데이터베이스의 구조를 가지고있다. 이 엔티티는 모두 필드가 prj_deletedtrk_deleted이며 삭제 된 경우 (보기에서 숨김) 1 값을 가질 수 있고 0 값은 삭제되지 않은 경우 (여전히보기에 있음) 일 수 있습니다.

내 프로젝트보기 페이지에는 해당 프로젝트의 트랙 라인을 기반으로 각 프로젝트의 아이콘이 표시됩니다. 이러한 아이콘은 trk_status의 값을 기준으로 표시됩니다 trk_state

만 여러 tracklines (prj_id BY 따라서 그룹)이있는 경우에도, 프로젝트 1 시간을 표시해야 내 프로젝트보기 페이지

내 문제 : BY GROUP에 MySQL의 문서에서

는 :

"또한, 각 그룹의 값의 선택은 추가 기능에 의해 영향을받을 수 없다 ORDER BY 절. 결과 세트 정렬은 값을 선택한 후에 ORDER BY가 서버가 선택하는 값에 영향을주지 않습니다. "

내 프로젝트보기 페이지는 삭제되지 않은 트랙 라인의 아이콘을 표시하는 것이 가장 이상적입니다. 왜 내가 GROUP BY 전에 trk_deleted에 의해 주문하는줬으면한다는 그룹이 삭제되지 않은 trackline으로 이루어졌다 때문에 발생했습니다.

가 가

는 희망이 사람이 내가 여기에서 얻으려고 무엇을 이해할 수있다.

+0

을 명확히하십시오 및'trk_state'는 데이터 무결성 문제이며 데이터에 이상이있을 수 있습니다. 프로젝트 당 하나의 '트랙 라인'만 있습니까 (그리고 나머지는 저장 목적으로 유지됩니다)? 프로젝트에 두 개의 트랙 라인이 있고 두 개의 trk_status가 유효하다는 것은 무엇을 의미합니까? –

답변

0

샘플 데이터를 제공 할 수 있고 응답을 원하는 경우 더 나은 쿼리를 제공 할 수 있습니다. 평균 시간 :

SELECT Project.*, MAX(`trk_deleted`), MAX(`trk_status`), MAX(`trk_state`) 
FROM `project` AS `Project` 
LEFT JOIN `trackline` ON `prj_id` = `trk_project` AND trk_deleted = '0' 
WHERE `prj_deleted` = '0' 
GROUP BY `prj_id` ORDER BY `prj_name`; 
+0

두 번째 조건으로 조인 trk_deleted = '0'트릭을 수행했습니다. 감사! – Justin

0

난 당신이 바로, 당신은 tracklines 여부, 삭제되지 않은 tracklines을 가지고, 삭제되지 않은 모든 프로젝트를 얻으려면 도착합니다. 그러나 trk_delete = 0을 추가하면 트랙 라인이없는 프로젝트는 제외됩니다. 프로젝트가 여러 현재`trk_status`을 가질 수 있다면 그 아니 그것을 있다면

내가 MySQL을 잘 알고 아니에요,하지만 난 당신이 원하는 생각이

SELECT 
    Project.*, 
    `trk_deleted`, 
    `trk_status`, 
    `trk_state` 
FROM 
    `project` AS `Project` 
LEFT JOIN 
    `trackline` ON `prj_id` = `trk_project` 
WHERE 
    `prj_deleted` = '0' 
    AND trk_deleted = '0' OR trk_deleted IS NULL 
GROUP BY 
    `prj_id` 
ORDER BY 
    `prj_name` 

NULL IS, 자신에게