Ich sehe zwei mögliche Lösungen dafür:
1. Möglichkeit:
Sie verwenden eine Funktion, um sort_num
einfach zu ignorieren wenn es nicht gesetzt ist:
`SELECT * FROM mytable ORDER BY coalesce(sort_num, id)`
coalesce()
gibt den ersten Nicht-Null-Wert zurück, daher würden Sie Werte für sort_num
einfügen wenn Sie Artikel wirklich nachbestellen müssen.
2. Möglichkeit:
Sie schreiben einen Trigger, der den Wert automatisch setzt, wenn er nicht in der Insert-Anweisung gesetzt ist:
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
//
(inspiriert von diesem Kommentar )
Dies kann jedoch zu Parallelisierungsproblemen führen (mehrere Abfragen werden gleichzeitig eingefügt)