Jeg ser to mulige løsninger på dette:
1. Mulighed:
Du bruger en funktion til simpelthen at ignorere sort_num
hvis den ikke er indstillet:
`SELECT * FROM mytable ORDER BY coalesce(sort_num, id)`
coalesce()
returnerer den første ikke-nul værdi, derfor vil du indsætte værdier for sort_num
hvis du virkelig har brug for at genbestille varer.
2. Mulighed:
Du skriver en trigger, som automatisk sætter værdien, hvis den ikke er sat i insert-sætningen:
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
//
(inspireret af denne kommentar )
Dette kan dog løbe ind i parallelliseringsproblemer (flere forespørgsler indsættes på samme tid)