Jag ser två möjliga lösningar för detta:
1. Möjlighet:
Du använder en funktion för att helt enkelt ignorera sort_num
om det inte är inställt:
`SELECT * FROM mytable ORDER BY coalesce(sort_num, id)`
coalesce()
returnerar det första icke-nullvärdet, därför skulle du infoga värden för sort_num
om du verkligen behöver beställa om artiklar.
2. Möjlighet:
Du skriver en trigger, som automatiskt sätter värdet om det inte är satt i insert-satsen:
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
//
(inspirerad av denna kommentar )
Detta kan dock stöta på problem med parallellisering (flera frågor infogas samtidigt)