私たちはオンラインプロジェクト管理システムを使用していますが、私はそれをやや拡張しようとしています。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 | | +--------------+-----------------------+------+-----+---------------------+----------------+
このテーブルには、タスクが完了したときを追跡し、また、すべてのタスクの変更の状態を保持します。
プロジェクトテーブルとアイテム(またはタスク)テーブルがあります。
私は基本的には、プロジェクトのリストを抽出し、完了したタスクの割合の詳細を抽出できるようにしたいと考えています。しかし、プロジェクトの各タスクを完了したかどうかについての詳細を列挙できるだけであれば、今は幸せです。
私が知っている限り、タスクの最新ステータスを取得する最善の方法は、statusDateが最新であるtodo_itemStatusを選択することです。itemItemはitemIdがタスクと等しいときにitemStatusIdが最大です興味がある。
<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
あなたの質問をもう一度読んでください。私は実際にGROUP BYが必要としていると思います - あなたのために何かを思いついてみてください。 – Justin
ありがとうございました。私はその記事を見て、あなたの投稿を再読し、私がどのように乗っているかを教えてくれるでしょう。ありがとうございました! – DaveS