2014-01-21 2 views
-1

나는 프로젝트 테이블과 작업 테이블을 가지고있다. 프로젝트 목록을 검색하고 각 프로젝트에 최신 due_date로 작업을 표시하고 싶습니다.가장 최근의 mysql 항목 가져 오기

아래의 코드는 프로젝트를 표시하는 데 적합하지만 한 가지 작업을 검색하지만 가장 최근의 due_date로 작업을 검색하지 않는 대신 가장 낮은 id 기본 키를 사용하여 작업을 검색하는 것으로 보입니다. 둘 이상의 작업을 허용하면 due_date에 의해 결과가 정렬되지만이를 하나로 제한하려고합니다.

SELECT t.*, p.id as project_id, p.name as project_name, p.archive as project_archive 
FROM project p 
JOIN user_project up ON p.id = up.project AND up.user = '.$user.' 
LEFT JOIN (SELECT tmp.* FROM 
(SELECT *, IF(@prev <> project_id, @rownum := 1, @rownum := @rownum+1) AS rank, @prev := project_id 
FROM task t 
JOIN (SELECT @rownum := NULL, @prev := 0) AS r 
WHERE user_id = '.$user.' 
ORDER BY t.project_id) AS tmp 
WHERE tmp.rank <= 1) AS t ON p.id = t.project_id 
ORDER BY p.id asc, t.due_date desc 
+0

에 선

ORDER BY t.project_id) AS tmp 

을 변경하여이 문제를 해결했다. 그들이 그것을 어떻게 해결했는지 보지 않겠습니까? – Strawberry

+0

"최신"이란 "각 프로젝트의 최대 마감일"을 의미합니까? – Barranka

+0

안녕 Barranka 예 최대 due_date 내가 원하는 것입니다. 테이블에있는 날짜 형식으로 개최됩니다 – EnduroDave

답변

0

감사합니다. 나는 결국이 다른 사람이 가진 것을 같은 문제가

ORDER BY t.project_id, t.due_date desc) AS tmp 
1

는 가 ON p.id = up.project 및 up.user = '. $ 사용자를 user_project을 가입이 쿼리는 프로젝트 페이지에서 당신에게

SELECT * 
FROM project p 
JOIN user_project up ON p.id = up.project AND up.user = '.$user.' 
left join task on p.id = task.project_id and 
task.due_date = (select max(due_date) from task where project_id = p.id) 
+0

도움을 주셔서 감사합니다. 나는'on clause'에서'Unknown column 't.project_id'를 얻습니다. – EnduroDave

1

$ SELECT * 를 도울 수 가능 . ' 는 p.id = task.project_id과의 작업에 참여 왼쪽 task.due_date = (작업에서 최대 (DUE_DATE)를 선택 곳 PROJECT_ID = p.id)하기 위해 노력 모두에게 $

+0

이 솔루션은 저에게 반으로 작용합니다. 그것은 질문에 정확히 무엇을 요구하지만, 또한 작업 테이블에서 데이터를 가져 오는 코드 묶음을 제거합니다. 나는 코드를 결합하려고 노력하지만 지금까지별로 행운이 없다. – EnduroDave

관련 문제