2011-08-19 2 views
2

내 온라인 프로젝트를 관리하기 위해 trac가 설치되어 있습니다. 나는 날짜 플러그인을 DateFieldPlugin에도 설치했다. 맞춤 보고서에이 날짜를 표시 할 수 없습니다.trac 리포트의 기한 열을 표시하는 방법은 무엇입니까?

다음 코드는 일반 보고서를 생성합니다. 그것은 여러 번 같은 하나 개의 작업 행을 보여주고 있지만 위의 코드는 나에게 기한 열을 보여주는

SELECT p.value AS __color__, 
owner AS __group__, 
id AS ticket, severity, summary, component, milestone, t.type AS type, time AS created, 
changetime AS _changetime, description AS _description, 
reporter AS _reporter, c.value AS Duedate 
FROM ticket t 
LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority', ticket_custom c 
WHERE status = 'assigned' 
ORDER BY owner, p.value, t.type, time 

:

SELECT p.value AS __color__, 
owner AS __group__, 
id AS ticket, severity, summary, component, milestone, t.type AS type, time AS created, 
changetime AS _changetime, description AS _description,reporter AS _reporter 
FROM ticket t 
LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' 
WHERE status = 'assigned' 
ORDER BY owner, p.value, t.type, time 

와 나는 이런 식으로 뭔가를 할 수 있습니다.

아무도 나를 도울 수 있습니까?

답변

7

데릭이 거기에서 빠져 나옵니다. 그럼에도 불구하고, 여기에 작동 하나입니다

SELECT p.value AS __color__, 
owner AS __group__, 
id AS ticket, severity, summary, component, milestone, t.type AS type, time AS created, 
changetime AS _changetime, description AS _description, 
reporter AS _reporter, c.value AS Duedate 
FROM ticket t 
LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' 
LEFT OUTER JOIN ticket_custom c ON t.id = c.ticket AND c.name = 'due_date' 
WHERE status = 'assigned' 
ORDER BY owner, p.value, t.type, time 

만 당신이 'DUE_DATE은'내 구성에서처럼 아니라면, 당신의 날짜 필드 이름을 와 일치하도록 c.name 값을 대체해야합니다.

배경 :

sqlite> .schema ticket_custom 
CREATE TABLE ticket_custom (
    ticket integer, 
    name text, 
    value text, 
    UNIQUE (ticket,name) 
); 

기본 키 그냥 티켓되지 않습니다주의 사항 : 스키마에 대한 호출이 계시대로 'ticket_custom'테이블 정의는 행 당 하나의 키 - 값 쌍입니다 번호이지만 표 (번호)와 (사용자 정의 열) 이름이 결합됩니다. 따라서 JOIN에 추가 WHERE 절이 필요하거나 여전히 일치하는 모든 티켓의 각 사용자 정의 필드에 대해 하나씩 여러 행을 가져옵니다. 이것은 하나의 티켓에 대한 모든 정보가 단일 행에있는 주 테이블 '티켓'과 대조됩니다.

+0

고마워요. 정확한 코드는 작동하지 않았지만 쿼리에서 AND 절 (AND c.name = 'due_date')을 제거했지만 작동하는 것처럼 보입니다. 좀 다른 형식으로 시도해 보도록하겠습니다. 테이블은 이미 만기일에 ticket_custom로 존재합니다.이 테이블은 새로운 사용자 정의 파일 (날짜)을 위해 설치된 플러그인에 의해 생성되었습니다. – SachinKRaj

+0

사용자 정의 필드 이름이 '날짜'이면 'AND c.name ='날짜 '가 필요합니다. 위에서 설명한대로 적어도 티켓 당> 1 개의 사용자 정의 필드가 있으면 ticket_custom 테이블에 조인 할 수 없습니다. 이름으로 선택해야하며, 어떤 값을 티켓 테이블에 추가 열로 조인해야합니까 - 내 오류가 나타났습니다 ... JOIN 부분에있는 이름 선택기를 이동하여 쿼리를 수정했습니다. 다시 시도하십시오. – hasienda

+0

두제 열이 비어 있습니까?이 쿼리와 – SachinKRaj

2

에 조인 조건을 지정하지 않았습니다. 따라서 ticket_custom의 모든 레코드를 나머지 쿼리의 모든 레코드에 조인하는 CROSS JOIN을 수행하고 있습니다. 따라서 ticket left join enum이 원래 100 개의 행을 반환하고 ticket_custom의 행 수가 20 인 경우 두 번째 쿼리에서 2,000 개의 결과 행이 생성됩니다.

ticket_custom이 다른 테이블과 관련되는 f}을 판별하고 적절한 술어를 제공해야합니다. 대체로 다음과 같습니다.

SELECT p.value AS __color__, 
owner AS __group__, 
id AS ticket, severity, summary, component, milestone, t.type AS type, time AS created, 
changetime AS _changetime, description AS _description, 
reporter AS _reporter, c.value AS Duedate 
FROM ticket t 
LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' 
LEFT JOIN ticket_custom c ON t.id = c.ticket_id 
WHERE status = 'assigned' 
ORDER BY owner, p.value, t.type, time 

(새로운 LEFT JOIN 행 참조). 열은 추측입니다. 두 열과 관계가있는 열을 대체해야합니다.

+0

감사합니다 ... 어떻게 든 논리를 분명히 이해하는 데 도움이되었습니다. – SachinKRaj

관련 문제