मुझे इसके लिए दो संभावित समाधान दिखाई दे रहे हैं:
<मजबूत>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
//
(इस टिप्पणी से प्रेरित होकर ए> )
हालाँकि, यह समांतरता के मुद्दों (एक ही समय में कई प्रश्नों को सम्मिलित करने) में चल सकता है