2013-05-20 6 views
13

मेरे पास मेरे डेटाबेस में से एक में 'textile_events' नाम की एक तालिका है।MySQL एक वृद्धिशील चर के साथ एक फ़ील्ड अपडेट करें

mysql> describe textile_events; 

+-------------+--------------+-----+---------+----------------+ 
| Field  | Type   | Key | Default | Extra   | 
+-------------+--------------+-----+---------+----------------+ 
| id   | int(11)  | PRI | NULL | auto_increment | 
| token  | varchar(20) |  | NULL |    | 
| reg_time | datetime  |  | NULL |    | 
| eid   | varchar(20) |  | NULL |    | 
| fname  | varchar(20) |  | NULL |    | 
| lname  | varchar(20) |  | NULL |    | 
| paid  | varchar(10) |  | NULL |    | 
| seq_no  | int(11)  |  | NULL |    | 
+-------------+--------------+-----+---------+----------------+ 
8 rows in set (0.00 sec) 

mysql> select count(*) from textile_events; 

+----------+ 
| count(*) | 
+----------+ 
|  9325 | 
+----------+ 
1 row in set (0.00 sec) 

mysql> select count(*) from textile_events where eid = 'headsup' ; 

+----------+ 
| count(*) | 
+----------+ 
|  2553 | 
+----------+ 
1 row in set (0.01 sec) 

'seq_no' फ़ील्ड कल उपरोक्त तालिका में पेश किया गया था।

अब, मुझे सभी 'headsup' ईवेंट के लिए 'seq_no' फ़ील्ड में वृद्धिशील संख्या असाइन करने की आवश्यकता है जहां भुगतान क्षेत्र 'भुगतान' के बराबर है।

अन्य तरह से, मैं कुछ इस तरह रहा हूँ,

$i = 250 
while(true): 
    $i++ 
    UPDATE textile_events SET 'seq_no' = $i 
     WHERE eid = 'headsup' AND paid = 'paid' 
endwhile; 

कैसे मैं केवल recods कि किसी दिए गए शर्त को satify एक नव शुरू की क्षेत्र के लिए एक incrementing संख्या आवंटित करते हैं?

उपलब्ध विकल्प क्या हैं और इसे पूरा करने का सबसे प्रभावी तरीका क्या है?

उत्तर

36

क्या आप इस तरह कुछ ढूंढ रहे हैं?

UPDATE textile_events e, 
     (SELECT @n := 249) m 
    SET e.seq_no = @n := @n + 1 
    WHERE e.eid = 'headsup' AND e.paid = 'paid' 

SQLFiddle

+0

धन्यवाद! यही वह सही उत्तर है जिसे मैं ढूंढ रहा था। – Upeksha

+0

@Upeksha आप निश्चित रूप से स्वागत है। खुशी हुई यह मदद की :) – peterm

+0

कोई संकेत है कि मैं काउंटर को एक स्ट्रिंग को प्रीपेड करने के लिए इसे कैसे बदल सकता हूं? जैसे 1,2,3,4 की बजाय ... foo1, foo2, foo3, foo4 ... – kabadisha

3

हो सकते हैं यह आप में मदद मिलेगी ...

DELIMITER $$ 
    DROP PROCEDURE IF EXISTS manual_increment_count$$ 
    CREATE PROCEDURE manual_increment_count() 
    BEGIN 
    DECLARE count INT DEFAULT 0; 
    SELECT COUNT(*) INTO count FROM textile_events 
    WHILE count > 0 
     SET count = count + 1; 
     update textile_events 
      set seq_no = count where eid = 'headsup' AND paid = 'paid'; 
    END WHILE; 
    END$$ 
    DELIMITER ; 
5

सरल प्रश्न किया, बस आप चाहते हैं कुछ संख्या के लिए एक चर सेट होगा। फिर उस नंबर से 1 को बढ़ाकर कॉलम को अपडेट करें। सभी पंक्तियों के लिए यह incrementing 1

SET @a = 50000835 ; 
    UPDATE `civicrm_contact` SET external_identifier = @a:[email protected]+1 
    WHERE external_identifier IS NULL; 

आशा है कि यह कुछ एक में मदद करता है के द्वारा प्रत्येक पंक्ति आईडी अपडेट करेंगे। :)

संबंधित मुद्दे