2010-12-13 15 views
18

से mysql फ़ील्ड नाम क्या फ़ील्ड का चयन करना संभव है जो नाम स्ट्रिंग है?परिवर्तनीय

SELECT 'fieldname' FROM table

मैं ट्रिगर के लिए इस की जरूरत है गतिशील फ़ील्ड नाम कुछ की तरह

SET fieldname = NEW.`name`; 
UPDATE table SET fieldname = 1 ; 
+3

मुझे समझ नहीं आता तुम क्या मतलब है –

+0

कैसे आप एसक्यूएल चल रहे हैं? गतिशील एसक्यूएल पर पढ़ें। –

+0

"स्ट्रिंग" नाम वाला एक फ़ील्ड? 'तालिका \ '' से \ 'स्ट्रिंग \' चुनें \ '? – jwueller

उत्तर

18

के लिए स्ट्रिंग अपने बाहरी अनुप्रयोग (PHP) की तरह, सुनिश्चित करें कि, बस MySQL बयान का निर्माण में है।

यदि स्ट्रिंग एक MySQL तालिका के अंदर है, तो आप नहीं कर सकते। MySQL में कोई eval() या ऐसा फ़ंक्शन नहीं है। निम्नलिखित असंभव है:

मान लीजिए कि आपके पास "स्तंभ नाम" फ़ील्ड के साथ एक टेबल 'क्वेरी' है जो तालिका "mytable" में कॉलम नामों में से एक को संदर्भित करता है। वहाँ 'जिज्ञासा' है कि आप columnName आप चाहते हैं का चयन करने के लिए अनुमति के अतिरिक्त कॉलम हो सकती है ...

INSERT INTO queries (columname) VALUES ("name") 
SELECT (select columnname from queries) from mytable 

आप तथापि PREPARED STATEMENTS के साथ काम कर सकते हैं। सावधान रहें यह बहुत हैकी है।

SELECT columnname from queries into @colname; 
SET @table = 'mytable'; 
SET @s = CONCAT('SELECT ',@colname,' FROM ', @table); 

PREPARE stmt FROM @s; 
EXECUTE stmt; 
+4

तैयार कथनों को ट्रिगर्स के भीतर अनुमति नहीं है ... – samrockon

+1

शायद पार्टी में थोड़ा देर हो चुकी है, लेकिन क्या ... आप इस व्यवहार का उल्लेख बहुत हैकी है। लेकिन क्या आप शायद यह समझा सकते हैं कि यह क्यों है? क्योंकि यह समाधान मुझे बहुत मदद करता है, लेकिन मैं एक अस्थिर फिक्स पर निर्भर नहीं होना चाहता। – mahulst

+1

कोड हैकी है क्योंकि यह सीधा एसक्यूएल सुविधाओं का उपयोग नहीं कर रहा है (क्योंकि ये सुविधाएं मौजूद नहीं हैं)। लेकिन चिंता न करें, यह स्थिर है और आप पर नहीं टूट जाएगा। दस मिनट पहले तक, मैं इसे उत्पादन में उपयोग कर रहा हूं! – dotancohen

0

आप एक से अधिक स्तंभ का चयन करना चाहते हैं:

SELECT GROUP_CONCAT(COLUMN_NAME) FROM information_schema.`COLUMNS` C 
WHERE table_name = 'MyTb' AND COLUMN_NAME LIKE '%whatever%' INTO @COLUMNS; 

SET @table = 'MyTb'; 
SET @s = CONCAT('SELECT ',@columns,' FROM ', @table); 

PREPARE stmt FROM @s; 
EXECUTE stmt;