我们使用在线项目管理系统,并试图稍微扩展它。帮助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