2009-11-21 17 views
75

मैं php (mysql) में एक रिपोर्ट पैदा कर रहा हूँ में एक से अधिक का चयन करें बयान,एकल क्वेरी

पूर्व:

`select count(id) as tot_user from user_table 
select count(id) as tot_cat from cat_table 
select count(id) as tot_course from course_table` 

इस तरह मैं 12 टेबल है।

क्या मैं इसे एक प्रश्न में बना सकता हूं। अगर मैंने किया? प्रक्रिया धीमी हो जाती है?

+0

माईसाम टेबल के लिए भी एक बेहतर तरीका है, मेरा उत्तर देखें, जो तेज़ है। – Pentium10

उत्तर

186
SELECT (
    SELECT COUNT(*) 
    FROM user_table 
    ) AS tot_user, 
    (
    SELECT COUNT(*) 
    FROM cat_table 
    ) AS tot_cat, 
    (
    SELECT COUNT(*) 
    FROM course_table 
    ) AS tot_course 
+1

धन्यवाद, इसका काम – boss

+5

आह वाह, मुझे कभी नहीं पता था कि क्वेरी काम कर सकती है। –

+0

माईसाम टेबल के लिए भी एक बेहतर तरीका है, मेरा जवाब देखें। – Pentium10

10

आप निश्चित रूप से बेन जेम्स द्वारा पोस्ट किए गए एक चयन एजग्रेशन स्टेटमेंट का चयन कर सकते हैं, हालांकि इसके परिणामस्वरूप आपके पास टेबल के रूप में कई कॉलम होंगे।

SELECT COUNT(user_table.id) AS TableCount,'user_table' AS TableSource FROM user_table 
UNION SELECT COUNT(cat_table.id) AS TableCount,'cat_table' AS TableSource FROM cat_table 
UNION SELECT COUNT(course_table.id) AS TableCount, 'course_table' AS TableSource From course_table; 

इस तरह एक approch के बारे में अच्छी बात है कि आप स्पष्ट रूप से संघ बयान लिख सकते हैं और कोई दृश्य उत्पन्न या मूल्यों है कि एक से लगातार जुड़ जाते हैं धारण करने के लिए एक अस्थायी तालिका बना सकते हैं: वैकल्पिक विधि इस प्रकार हो सकता है अपने टेबल नामों के स्थान पर चर का उपयोग कर प्रो कैल्स। मैं बाद वाले के साथ और अधिक जाना चाहता हूं, लेकिन यह वास्तव में व्यक्तिगत वरीयता और आवेदन पर निर्भर करता है। यदि आप सुनिश्चित हैं कि तालिका कभी नहीं बदलेगी, तो आप डेटा को एक पंक्ति प्रारूप में चाहते हैं, और आप तालिकाओं को नहीं जोड़ेंगे। बेन जेम्स के समाधान के साथ छड़ी। अन्यथा मैं लचीलापन की सलाह दूंगा, आप हमेशा एक क्रॉस टैब struc हैक कर सकते हैं।

21

आप MyISAM तालिकाओं का उपयोग करते हैं, सबसे तेज़ तरीका सीधे क्वेरी करने है आँकड़े:

select table_name, table_rows 
    from information_schema.tables 
where 
    table_schema='databasename' and 
    table_name in ('user_table','cat_table','course_table') 

आप InnoDB है, तो आप) के रूप में information_schema.tables में सूचना दी मूल्य है गिनती (साथ क्वेरी करने के लिए है गलत।

+1

हाँ यह बेहतर है, अच्छी जानकारी के लिए +1 – sathish

+0

यदि आप सोच रहे हैं, तो यह भी देखें [MyISAM और InnoDB के बीच के अंतर के बारे में ये उत्तरों] (https://stackoverflow.com/questions/20148/MyISAM बनाम InnoDB)। –

12
select RTRIM(A.FIELD) from SCHEMA.TABLE A where RTRIM(A.FIELD) = ('10544175A') 
UNION 
select RTRIM(A.FIELD) from SCHEMA.TABLE A where RTRIM(A.FIELD) = ('10328189B') 
UNION 
select RTRIM(A.FIELD) from SCHEMA.TABLE A where RTRIM(A.FIELD) = ('103498732H') 
+8

इस से क्या प्रश्न का उत्तर दिया गया है? – Oliv

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