編集:現在作業中、この投稿の下部にある解決策。
このクエリを何時間も作成しようとしましたが、成功しませんでした:
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() )。Order
ID
user_job_tasks
whereに値が一致するレコードが存在する場合、値が一致するwherejobID
で見つかった値の最大値 + 1 としてtaskID
設定したいと考えています。Order
Order
user_job_tasks
jobID
そうでない場合は、Order
1 に設定されます。
エラーが発生するだけです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()