मैं intereted मिला, तो मैं निम्नलिखित समाधान के साथ आया था। निम्न तालिका पर विचार करें:
CREATE TABLE `placements` (
`id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
`user` varchar(12) NOT NULL,
`place` tinyint(3) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `placements` (`id`, `user`, `place`) VALUES
(1, 'Adam', 1),
(2, 'Bill', 2),
(3, 'Carl', 3),
(4, 'Doug', 4),
(5, 'Eddy', 5),
(6, 'Frank', 6),
(7, 'George', 7),
(8, 'Harry', 8),
(9, 'Ian', 9),
(10, 'John', 10);
तो, मान लीजिए कि आपने जॉन # 1 जगह के लिए एडम के खिलाफ ऊपर जाना है और जॉन जीत:
UPDATE placements
SET place = place +1
WHERE user != "John";
UPDATE placements
SET place = 1
WHERE user = "John";
जॉन पहली जगह में है, और अन्य सभी को था एक स्थिति नीचे टक्कर लगी। अब आइए कहें कि जॉर्ज कार्ल के लिए कार्ल के पद पर है (वर्तमान में प्लेसमेंट # 4)। जॉर्ज जीता: इसका मतलब है कि जॉर्ज अब # 4 और कार्ल प्लेस # 5 है। जॉर्जेस की पुरानी स्थिति # 8 के साथ क्या होता है?
UPDATE placements
SET place = place +1
WHERE place > 3
AND place < 9
AND user != "George";
UPDATE placements
SET place = 4
WHERE user = "George";
तो, वास्तव में ऐसा करना मुश्किल नहीं है। आपको बस अपने कुछ उपयोगकर्ताओं के वर्तमान प्लेसमेंट को जानना होगा, और आवश्यकतानुसार अपने MySQL क्वेरीज को एडजस्ट करना होगा।
यदि आप इन प्रश्नों को अपने टर्मिनल या phpMyAdmin (या जो कुछ भी आप उपयोग करते हैं) में पेस्ट करते हैं, और साथ ही पालन करते हैं, तो आप देखेंगे कि यह काम करता है।
आपकी क्वेरी अच्छी लगती है और अलगाव में इच्छित के रूप में काम करना चाहिए। –
सुंद सबसे विचित्र। क्या यह आपकी ** सटीक ** क्वेरी है या क्या आपके पास 'WHERE' क्लॉज है? आप इसे कैसे निष्पादित कर रहे हैं? यह निश्चित रूप से कई बार निष्पादित किया जाना चाहिए? क्या आपके पास टेबल पर कोई ट्रिगर है जो चीजों में हस्तक्षेप कर सकता है? इसके अलावा आपकी क्वेरी निश्चित रूप से 'अपडेट एसईटी ऑर्डर = @ ऑर्डर + 1' या कुछ पसंद नहीं है? –
पीछे की ओर वृद्धि? बस समझने की कोशिश कर रहा है ... – Orbit