2014-01-21 16 views
-1

У меня есть таблица проекта и таблица задач. Я хочу получить список проектов, а затем для каждого проекта отобразить задачу с последней функцией due_date.Получить последнюю запись mysql

Приведенный ниже код работает для отображения проектов и будет извлекать одну задачу, но, похоже, эта задача не будет получать задание с последним параметром due_date и вместо этого, как представляется, возвращает задачу с наименьшим id-ключом. Если я разрешаю более одной задачи показать результаты, упорядоченные по умолчанию, но я хочу ограничить их.

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

Это та же проблема, что все еще иметь. Почему бы не увидеть, как они это решили? – Strawberry

+0

Под «последним» вы подразумеваете «максимальный срок для каждого проекта»? – Barranka

+0

HI Barranka да, максимум, что я хочу. Его держали как формат даты в таблице – EnduroDave

ответ

0

Спасибо всем, что пытался помочь. В конце концов я решил эту проблему, изменив линию

ORDER BY t.project_id) AS tmp 

в

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

Возможно, что этот запрос может помочь вам

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

Спасибо, что постарались помочь. Я получаю 'Unknown column 't.project_id' in 'on clause'' – EnduroDave

1

$ SELECT * FROM проекта р РЕГИСТРИРУЙТЕСЬ user_project вверх на p.id = up.project И up.user =». $ Пользователю «. оставил присоединиться задачу на p.id = task.project_id и task.due_date = (выберите тах (due_date) от задачи, где project_id = p.id) $

+0

Это решение работает для меня. Он делает именно то, что я просил в вопросе, но он также удаляет кучу кода, который получает данные из таблицы задач. Я пытаюсь совместить код, но пока не очень повезло. – EnduroDave

Смежные вопросы