2010-12-13 23 views
5

क्या कोई इस mysql मुद्दे के साथ मेरी सहायता कर सकता है? मैं एक डीबी से सभी टेबल नाम पाने की कोशिश कर रहा हूँ।शो टेबल के साथ मेल खाने वाले टेबल नाम

मेरी db में मैं की तरह टेबल है:

_table1, _table2, table3, table4, table5_xrefs

लेकिन मैं बिना ही टेबल प्राप्त करना चाहते हैं _ शुरुआत में और कम से _xref बिना समाप्त। तो इस उदाहरण में मुझे केवल table3 और table4 की आवश्यकता है।

मैं सभी टेबल नाम दिखाने के लिए show tables का उपयोग कर रहा हूं और जब मैं सही तालिका नाम से मेल खाने के लिए php का उपयोग कर रहा हूं। मैं सोच रहा था कि क्या मैं केवल एक mysql क्वेरी का उपयोग कर ऐसा कर सकता हूं।

उत्तर

33

यह संभव है लेकिन आपको यह जानना होगा कि SHOW TABLES क्वेरी से वापस कॉलम नाम स्ट्रिंग tables_in_ और आपके डेटाबेस नाम का समामेलन है। तो यह इस प्रकार दिखाई देगा, डेटाबेस test के लिए:

SHOW TABLES 
     WHERE tables_in_test NOT LIKE '\_%' 
     AND tables_in_test NOT LIKE '%\_xrefs' 

लेकिन मैं information_schema डेटाबेस का उपयोग करने के लिए इस जानकारी पाने के लिए पसंद करेंगे:

SELECT TABLE_NAME 
    FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = SCHEMA() /* = 'test'*/ 
    AND TABLE_NAME NOT LIKE '\_%' 
    AND TABLE_NAME NOT LIKE '%\_xrefs' 
+0

बहुत बहुत धन्यवाद। मुझे एहसास हुआ कि पहली क्वेरी दूसरे की तुलना में तेज है? आप इसका इस्तेमाल क्यों करना पसंद करते हैं? – Katie

+0

मुख्य रूप से स्थिरता के लिए, मैं अपने अनुप्रयोगों में तालिकाओं और फ़ील्ड के बारे में अधिक जानकारी प्राप्त करने के लिए info_schema का उपयोग कर रहा हूं। दूसरा कारण यह है कि मैं कॉलम नामों में परिवर्तनीय होने से नापसंद करता हूं - इसे आसानी से संग्रहीत प्रक्रिया में नहीं रखा जा सकता है। –

-1

आप शो तालिका प्रश्नों में use LIKE or WHERE कर सकते हैं।

+0

हाँ, यह सच है। मैं 'पसंद' का उपयोग कर सकता हूं लेकिन मैं 'पसंद नहीं' का उपयोग नहीं कर सकता या मैं गलत हूं – Katie

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