これには2つの解決策があります:
1。可能性:
関数を使用して、sort_num
を単に無視します 設定されていない場合:
`SELECT * FROM mytable ORDER BY coalesce(sort_num, id)`
coalesce()
null以外の最初の値を返すため、sort_num
の値を挿入します。 本当にアイテムを並べ替える必要がある場合。
2。可能性:
トリガーを作成します。トリガーは、挿入ステートメントで設定されていない場合は自動的に値を設定します。
DELIMITER //
CREATE TRIGGER sort_num_trigger
BEFORE INSERT ON mytable
FOR EACH ROW BEGIN
DECLARE auto_inc INT;
IF (NEW.sort_num is null) THEN
-- determine next auto_increment value
SELECT AUTO_INCREMENT INTO auto_inc FROM information_schema.TABLES
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME = 'mytable';
-- and set the sort value to the same as the PK
SET NEW.sort_num = auto_inc;
END IF;
END
//
ただし、これにより並列化の問題が発生する可能性があります(複数のクエリが同時に挿入されます)