プロセスによって実行されるタスクのリストを保持するテーブルがあります。各タスクは、入力ステータスに一致するアイテムに対してのみ機能し、タスクが完了すると、アイテムのステータスが出力ステータスに変更されます。
これらのタスクを追跡するために、私はこのようなテーブルを使用します。
CREATE TABLE `tasks` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(80) NOT NULL,
`job_type` varchar(45) NOT NULL,
`input_status` varchar(45) DEFAULT NULL,
`output_status` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
)
タスクのステータスは一連のイベントを形成します。ここに例があります
NULL -> NEW
NEW -> CREATE
CREATE -> INSPECT
INSPECT -> VERIFY
VERIFY -> PUBLISH
実際には、タスクのリストは非常に長くなります。注: さまざまなステータスの種類は不明です。これらのユーザー定義の値です。
input_status
レコードの順序を使用してテーブルを表示すると、タスクが間違った順序で表示されます。input_status
andによる並べ替えoutput_status
も機能しません (明らかに)。
が最初で、次にtonull
のチェーンが続くテーブルをソートするにはどうすればよいですか?input_status
output_status
追加のソート値を保持するために仮想フィールドを作成する必要があると思いますが、それがどうあるべきか、または計算されるべきかわかりません。
これは私がこれまでに試したことですが、うまくいきません。
SELECT *,
(SELECT input_status FROM tasks AS parent
WHERE parent.output_status = tasks.input_status
) AS sorted
FROM tasks
ORDER BY sorted, input_status;