우리는 온라인 프로젝트 관리 시스템을 사용하며 다소 확장하려고합니다.SQL 다중 테이블 쿼리 지원 - 중복 결과 반환
그것은 관심의 다음과 같은 테이블이:
todo_itemStatus: +--------------+-----------------------+------+-----+---------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+-----------------------+------+-----+---------------------+----------------+ | itemStatusId | bigint(20) unsigned | NO | PRI | NULL | auto_increment | | itemId | int(10) unsigned | NO | MUL | 0 | | | statusDate | datetime | NO | | 0000-00-00 00:00:00 | | | statusKey | tinyint(3) unsigned | NO | | 0 | | | memberId | mediumint(8) unsigned | NO | | 0 | | +--------------+-----------------------+------+-----+---------------------+----------------+
이 테이블은 작업이 완료되면 추적을 유지하고, 모든 작업 변경의 상태를 유지합니다.
그러면 프로젝트 테이블과 '항목'(또는 작업) 테이블이 있습니다.
기본적으로 작업 완료율에 대한 세부 정보가 포함 된 프로젝트 목록을 추출 할 수 있기를 원합니다. 그러나 지금은 프로젝트의 각 작업을 완료했는지 여부에 대한 세부 정보로 나열하면 행복 할 것입니다.
알고있는 한 가장 최근의 작업 상태를 얻는 가장 좋은 방법은 statusDate가 가장 최신 인 todo_itemStatus를 선택하는 것입니다. itemId가 가장 큰 itemId는 작업과 같습니다. 관심.
<pre>
select todo_item.itemId, todo_item.title, todo_itemStatus.statusKey, todo_itemStatus.statusDate
from todo_item, todo_project, todo_itemStatus
where todo_item.projectId = todo_project.projectId
and todo_project.projectId = 13
and todo_itemStatus.itemId = todo_item.itemId
and todo_itemStatus.statusDate = (
select MAX(todo_itemStatus.statusDate)
from todo_itemStatus key1 where todo_itemStatus.itemId = key1.itemId);
</pre>
그러나,이 같은 출력의 모든 상태 업데이트를 얻을 수 :
은이 같은 쿼리를 시도 내가 하나를 원하는대로 내가 원하는 것이 아니다+--------+-----------------------------------------------------------------------------+-----------+---------------------+ | itemId | title | statusKey | statusDate | +--------+-----------------------------------------------------------------------------+-----------+---------------------+ | 579 | test complete item - delete me | 1 | 2009-07-28 13:04:38 | | 579 | test complete item - delete me | 0 | 2009-07-28 14:12:12 | +--------+-----------------------------------------------------------------------------+-----------+---------------------+
todo_itemStatus 테이블의 가장 최근 항목에서 statusKey/statusDate를 리턴하는 태스크 항목.
나는 내 설명에서 다소 모호하다는 것을 알고 있지만, 나는 거대한 메시지를 쓰고 싶지 않았다. 필요한 경우 훨씬 더 자세한 정보를 제공 할 수 있습니다.
누군가 내가 뭘 잘못하고 있다고 제안 할 수 있습니까? 실제 데이터베이스를 작성한 이후로 오랜 시간이 걸렸으므로 여기서 내가 잘못하고있는 것이 확실하지 않습니다 ...
많은 감사! 데이브
안녕하세요,하지만 DISTINCT가 내가 원하는대로 할 것이라고 생각하지 않습니다. 문제는 이들이 todo_item 당 여러 todo_itemStatus 항목이며 가장 최근의 항목을 얻고 싶다는 것입니다. 나는 비록 틀릴 수 있었다 ...그러나 빠른 테스트는 단지 오류를 산출했습니다. – DaveS
질문을 다시 읽으십시오. 실제로 GROUP BY가 필요하다고 생각합니다 - 여러분에게 atm을 위해 뭔가를 찾으려고합니다. – Justin
고마워. 이 기사를 살펴보고 게시물을 다시 읽은 다음 어떻게 시작하는지 알려 드리겠습니다. 고맙습니다! – DaveS