Виждам две възможни решения за това:
1. Възможност:
Използвате функция, за да игнорирате просто sort_num
ако не е зададено:
`SELECT * FROM mytable ORDER BY coalesce(sort_num, id)`
coalesce()
връща първата стойност, различна от нула, следователно бихте вмъкнали стойности за 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
//
(вдъхновено от this comment> a> )
Това обаче може да срещне проблеми с паралелизиране (вмъкване на няколко заявки едновременно)