Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एकाधिक तालिकाओं से परिणामों के साथ डेटाबेस पूछें?

सामान्य उदाहरण (PHP में):

प्रोग्रामिंग भाषा की सहायता से डायनेमिक SQL बनाना या अपने SQL क्वेरीज़ बनाना कुछ इस तरह दिखेगा (उदाहरण के लिए PHP में):

$pdos = $pdo->query("SHOW TABLES LIKE '%_name'");
$tables = $pdos->fetchAll();

$query = 'SELECT * FROM '.implode(' UNION SELECT * FROM ');
$pdo->query($query);

fetchAll विधि एक सरणी लौटाएगी जिसमें चयनित प्रत्येक तालिका के नाम होंगे।

implode($glue, $array) फ़ंक्शन एक सरणी लेता है और $glue . का उपयोग करके सरणी में प्रत्येक मान को संयोजित करता है पैरामीटर - आमतौर पर आप मानों की एक सरणी लेते हैं और $glue = ',' का उपयोग करके उन्हें इंपोड करते हैं कोमा द्वारा अलग किए गए मानों की सूची बनाने के लिए।

हमारे मामले में implode $glue . के रूप में आंशिक क्वेरी है एक बड़ा UNION JOIN create बनाने के लिए क्वेरी।

एक बार अंतिम $query निर्मित है यह कुछ इस तरह दिखना चाहिए:

SELECT * FROM table_1_name
    UNION
SELECT * FROM table_2_name
    UNION
SELECT * FROM table_3_name
    ....
    ....
    UNION
SELECT * FROM table_4000_name

परिणाम में सभी DISTINCT शामिल होने चाहिए सभी 4000 टेबल से पंक्तियाँ।

विशिष्ट उदाहरण (केवल-SQL प्रारूप में):

SELECT    GROUP_CONCAT(
              CONCAT('select * from ', table_name)
              SEPARATOR ' union '
          )
    INTO  @my_variable
    FROM  information_schema.tables
    WHERE table_schema = 'dbname'
    AND   table_name LIKE '%_name';

PREPARE   my_statement FROM @my_variable;
EXECUTE   my_statement;
  • पहला स्टेटमेंट information_schema . से सभी टेबल के नाम प्राप्त करेगा डेटाबेस;
  • CONCAT फ़ंक्शन प्रत्येक तालिका नाम को 'SELECT * FROM ' . के साथ उपसर्ग करता है स्ट्रिंग;
  • GROUP_CONCAT वह काम करता है जो implode PHP में किया होगा;
  • INTO क्लॉज सुनिश्चित करता है कि मान my_variable . नामक एक वेरिएबल के अंदर सहेजे गए हैं;

  • PREPARE कथन एक स्ट्रिंग मान लेता है (जैसे कि जिसे आपने my_variable . में सहेजा है ) और जांचता है कि क्या मान एक SQL क्वेरी है;

  • EXECUTE बयान एक "तैयार बयान" लेता है और अच्छी तरह से ... इसे निष्पादित करता है।

@my_variable एक अस्थायी चर है लेकिन यह केवल एक अदिश प्रकार का हो सकता है (varchar, int, date, datetime, बाइनरी, फ्लोट, डबल आदि) यह नहीं है एक सरणी।

GROUP_CONCAT फ़ंक्शन एक "एग्रीगेट फ़ंक्शन" है, जिसका अर्थ है कि यह एक समग्र मान लेता है (एक सरणी के समान अवधारणा - हमारे मामले में हमारी क्वेरी का परिणाम सेट) और एक साधारण स्ट्रिंग परिणाम आउटपुट करता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. लेन-देन के दौरान एक MYSQL तालिका में एक पंक्ति को लॉक करना

  2. मेरे वेब ऐप के लिए मेट्रिक्स कैसे स्टोर करें?

  3. MySQL डेटाबेस से बाधाओं की सूची

  4. MYSQLI_NUM का क्या अर्थ है और क्या करें?

  5. डेटा को एक MySQL तालिका से दूसरे में ले जाएँ