@
साइन एसक्यूएल में एक चर है।
MySQL में इसका उपयोग किसी क्वेरी के लगातार चलने के बीच या दो अलग-अलग क्वेरी के बीच डेटा स्थानांतरित करने के लिए एक मान को संग्रहीत करने के लिए किया जाता है।
एक उदाहरण
दो प्रश्नों के बीच डेटा स्थानांतरित करें
SELECT @biggest:= MAX(field1) FROM atable;
SELECT * FROM bigger_table WHERE field1 > @biggest;
एक अन्य उपयोग रैंकिंग में है, जिसके लिए MySQL के पास मूल समर्थन नहीं है।
क्वेरी के लगातार चलने के लिए मान संगृहीत करें
INSERT INTO table2
SELECT @rank := @rank + 1, table1.* FROM table1
JOIN( SELECT @rank := 0 ) AS init
ORDER BY number_of_users DESC
ध्यान दें कि यह काम करने के लिए, क्वेरी में पंक्तियों को संसाधित करने का क्रम निश्चित होना चाहिए, इसे गलत करना आसान है।
देखें:
http://dev.mysql .com/doc/refman/5.0/hi/user-variables.html
mysql सॉर्टिंग और रैंकिंग स्टेटमेंट
http:// www.xaprb.com/blog/2006/12/15/advanced-mysql-user-variable-techniques/
अपडेट करें
यह कोड कभी काम नहीं करेगा।
आपने अभी पहले कनेक्शन खोला है और कहीं भी @fields सेट नहीं हैं।
इसलिए वर्तमान में उनके पास null
है। मान.
उसके ऊपर, आप फ़ील्ड नामों को दर्शाने के लिए @vars का उपयोग नहीं कर सकते हैं , आप केवल . कर सकते हैं मूल्यों के लिए @vars का उपयोग करें।
$sql1 = "
LOAD DATA LOCAL INFILE 'import.csv'
REPLACE INTO TABLE tablename
FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"'
IGNORE 1 LINES
(`normalField`, @field1, @field2, `normalField2`, @field3, @field4)";