1

編集:現在作業中、この投稿の下部にある解決策。

このクエリを何時間も作成しようとしましたが、成功しませんでした:

UPDATE tasks
SET `Order`=
(
    CASE WHEN
    (
        SELECT EXISTS
        (
            SELECT 1
            FROM user_job_tasks ujt
            WHERE ujt.JobID = :jobID AND ujt.TaskID = LAST_INSERT_ID()
        )
    )
    THEN
    (
        SELECT `order` FROM
        (
            SELECT MAX(t.`Order`)+1 AS `Order`
            FROM user_job_tasks ujt
            LEFT OUTER JOIN tasks t ON ujt.TaskID = t.ID
            WHERE ujt.JobID = :jobID
        ) AS temp
    )
    ELSE
    (
        1
    )
    END
)
WHERE ID = LAST_INSERT_ID()

さて、これのポイントは、何かに等しいtasksテーブルの列を更新することです(ここでは LAST_INSERT_ID() )。OrderID

user_job_taskswhereに値が一致するレコードが存在する場合、値が一致するwherejobIDで見つかった値の最大値 + 1 としてtaskID設定したいと考えています。OrderOrderuser_job_tasksjobID

そうでない場合は、Order1 に設定されます。

エラーが発生するだけですGeneral error: 1093 You can't specify target table 'tasks' for update in FROM clause。クエリ構文に問題はありません。

わかりにくい説明で申し訳ありませんが、おそらく私はただ寝るべきです。


作業ソリューション:

UPDATE tasks
SET `Order`=
(
    COALESCE
    (
        (
            SELECT `Order` FROM
            (
                SELECT MAX(t.`Order`)+1 AS `Order`
                FROM user_job_tasks ujt
                LEFT OUTER JOIN tasks t ON ujt.TaskID = t.ID
                WHERE ujt.JobID = :jobID
            ) AS temp
        ),
        1
    )
)
WHERE ID = LAST_INSERT_ID()
4

1 に答える 1