Ik zie hiervoor twee mogelijke oplossingen:
Je gebruikt een functie om gewoon sort_num
. te negeren als het niet is ingesteld:
`SELECT * FROM mytable ORDER BY coalesce(sort_num, id)`
coalesce()
retourneert de eerste niet-null-waarde, daarom zou u waarden invoegen voor sort_num
als u echt artikelen opnieuw moet bestellen.
U schrijft een trigger, die automatisch de waarde instelt als deze niet is ingesteld in de insert-instructie:
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
//
(geïnspireerd door deze opmerking )
Dit kan echter leiden tot parallellisatieproblemen (meerdere query's die tegelijkertijd worden ingevoegd)