1

プロセスによって実行されるタスクのリストを保持するテーブルがあります。各タスクは、入力ステータスに一致するアイテムに対してのみ機能し、タスクが完了すると、アイテムのステータスが出力ステータスに変更されます。

これらのタスクを追跡するために、私はこのようなテーブルを使用します。

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_statusandによる並べ替えoutput_statusも機能しません (明らかに)。

が最初で、次にtonullのチェーンが続くテーブルをソートするにはどうすればよいですか?input_statusoutput_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;
4

3 に答える 3

0

並べ替えを適用する case ステートメントを作成できます (ただし、正確な構文についてはわかりません)。

SELECT * FROM tasks 
    ORDER BY 
        CASE WHEN input_status IS NULL THEN '_' 
        ELSE output_status END ASC;

もちろん、ケースステートメントをソートのニーズに合わせて調整する必要があります。

于 2013-08-21T13:13:31.513 に答える
0

ステータス値にマスター関係を定義したかどうかわかりません。もしそうなら、クエリはより簡単だったでしょう。

status_idstatus_text( nullnewverifyなど)を保持するマスター ステータス。tasks入力および出力のステータス ID 値についてマスターから参照する子。

于 2013-08-21T13:49:54.393 に答える