Ver. 3.2.0 未満からアップデートしたらエントリー編集画面を開いた時に PHPエラーが発生する
対象
Ver. 3.2.0 未満からアップデート
column_sort must be greater than 0から始まる PHPエラーが発生
原因
Ver. 3.2.0 よりエントリーのカラム番号で0を許容しなくなり、一部インポートしたデータや外部から挿入されたエントリーデータが不整合と判断されているケースが確認されております。
対処方法
必ずデータベースのバックアップを行い、以下のSQLを実行してください。
config.server.php で DB_PREFIX を変更されている方は、以下SQLのテーブル名 acms_ 部分を変更してください。
-- ---------------------------------------------------------------------
-- 1. column テーブルの再採番
-- ---------------------------------------------------------------------
-- column_entry_id + column_blog_id + column_parent_id 単位でグルーピングし、
-- column_id 昇順に 1 から連番を振り直す。
-- column_parent_id は NULL 許容のため NULL 同士も同一グループとして扱う。
UPDATE acms_column c
JOIN (
SELECT
column_id,
ROW_NUMBER() OVER (
PARTITION BY column_entry_id, column_blog_id, column_parent_id
ORDER BY column_id ASC
) AS new_sort
FROM acms_column
WHERE column_entry_id IN (
-- column_sort = 0 を含むエントリーのみを対象にする
SELECT DISTINCT column_entry_id
FROM acms_column
WHERE column_sort = 0
)
) t ON c.column_id = t.column_id
SET c.column_sort = t.new_sort;
-- ---------------------------------------------------------------------
-- 2. column_rev テーブルの再採番
-- ---------------------------------------------------------------------
-- リビジョン(タイムマシン機能)側も同様に、column_entry_id + column_rev_id +
-- column_blog_id + column_parent_id 単位でグルーピングして再採番する。
UPDATE acms_column_rev c
JOIN (
SELECT
column_id,
column_rev_id,
ROW_NUMBER() OVER (
PARTITION BY column_entry_id, column_rev_id, column_blog_id, column_parent_id
ORDER BY column_id ASC
) AS new_sort
FROM acms_column_rev
WHERE (column_entry_id, column_rev_id) IN (
-- column_sort = 0 を含む (entry_id, rev_id) の組み合わせのみを対象にする
SELECT DISTINCT column_entry_id, column_rev_id
FROM acms_column_rev
WHERE column_sort = 0
)
) t ON c.column_id = t.column_id AND c.column_rev_id = t.column_rev_id
SET c.column_sort = t.new_sort;