我們使用在線項目管理系統,並試圖稍微擴展它。幫助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 | +--------+-----------------------------------------------------------------------------+-----------+---------------------+
這不是我想要什麼,我只想要一個任務條目以todo_itemStatus表中最新條目的statusKey/statusDate返回。
我知道我在描述中有點模糊,但我不想寫出大量的長信息。如有必要,我可以提供更多細節。
請有人建議我做錯了什麼?我已經做了很長一段時間,因爲我已經做了任何真正的數據庫的東西,所以我有點不確定我在這裏做錯了什麼...
非常感謝! 戴夫
嗨,謝謝,但我不認爲DISTINCT會做我想做的事。問題在於它們每個todo_item有多個todo_itemStatus條目,我只想獲得最新的。我可能是錯的,但...但一個快速測試只是產生了一個錯誤... – DaveS 2009-07-29 09:01:56