Мы используем онлайн-систему управления проектами, и я пытаюсь ее расширить.Помощь с 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 | | +--------------+-----------------------+------+-----+---------------------+----------------+
Эта таблица отслеживает, когда задача будет завершена, а также сохраняет статус всех изменений задач.
Существует таблица проекта и таблица «элемент» (или задачи).
Я в основном хочу, чтобы иметь возможность извлекать список проектов, с подробной информацией о проценте задач. Тем не менее, на данный момент я был бы счастлив, если бы мог просто перечислить каждую задачу в проекте с подробными сведениями о том, завершены ли они.
Насколько я знаю, лучший способ получить самый последний статус задачи - выбрать todo_itemStatus, где statusDate является самым новым, или itemStatusId является самым большим, в то время как 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 | +--------+-----------------------------------------------------------------------------+-----------+---------------------+
Который не то, что я хочу, как я хочу только одну возвращаемый функцией statusKey/statusDate из последней записи в таблице todo_itemStatus.
Я знаю, что в своем описании я был немного расплывчатым, но я не хотел писать массово длинное сообщение. При необходимости я могу предоставить гораздо больше деталей.
Пожалуйста, кто-нибудь может предложить, что я делаю неправильно? Прошло много времени с тех пор, как я сделал какие-то реальные материалы базы данных, поэтому я немного не уверен, что я делаю неправильно здесь ...
Большое спасибо! Dave
Привет, спасибо, но я не думаю, что DISTINCT будет делать то, что я хочу. Проблема заключается в том, что они представляют собой несколько записей todo_itemStatus для каждого файла todo_item, и я просто хочу получить самое последнее. Я мог ошибаться, хотя ...но быстрый тест только что дал ошибку ... – DaveS
Да, просто перечитайте свой вопрос, и я думаю, что на самом деле GROUP BY - это то, что нужно - пытаясь придумать что-то для вас. – Justin
Спасибо за это. Я посмотрю на эту статью, а затем перечитаю ваше сообщение и дам вам знать, как я нахожусь. Спасибо! – DaveS