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

किसी अन्य क्वेरी से थोड़ी देर में दूसरी पीडीओ MySQL क्वेरी कैसे करें?

यह एक पीडीओ सीमा नहीं है, यह MySQL क्लाइंट लाइब्रेरी की एक सीमा है। MySQL एक समय में केवल एक ही क्वेरी का समर्थन करता है। आप दूसरी क्वेरी निष्पादित नहीं कर सकते, जबकि पहली क्वेरी में अभी भी एक खुला कर्सर है (अर्थात इसके परिणाम अभी भी वापस आने हैं)।

आपके पास ये विकल्प हैं:

  • PDOStatement::fetchAll() का उपयोग करें और एक PHP सरणी में बाहरी क्वेरी का पूरा परिणाम सेट एकत्र करें। यह बाहरी क्वेरी के क्वेरी परिणाम को पूरा करता है। फिर आप सरणी पर लूप कर सकते हैं और प्रत्येक लूप पुनरावृत्ति के लिए एक अतिरिक्त SQL क्वेरी चला सकते हैं।

    लेकिन बाहरी परिणाम सेट के प्रत्येक लूप पुनरावृत्ति के लिए एक नई क्वेरी चलाना कुशल नहीं है। यह आपके आवेदन के प्रदर्शन को खत्म करने का एक अच्छा तरीका है।

    कुछ लोग इसे N+1 Selects Problem क्योंकि आप पहले चयन को चलाते हैं, जो N पंक्तियाँ लौटाता है, और फिर आप पहले चयन के परिणामों के आधार पर N चयन चलाते हैं।

  • यदि आप MySQL का उपयोग करते हैं, तो PDO::MYSQL_ATTR_USE_BUFFERED_QUERY का उपयोग करें। जो मूल रूप से वही काम करता है, आंतरिक रूप से एक सरणी में सहेजी गई सभी पंक्तियों को डाउनलोड करता है। फिर बाद में fetch() . पर कॉल करें बफ़र किए गए परिणामों पर बस पुनरावृति करें।

    लेकिन इसमें N+1 Selects antipattern भी शामिल है।

  • एक एकल SQL क्वेरी लिखना बेहतर है जो आपको वह मान देता है जो आप चाहते हैं। आपकी टिप्पणियों से अनुमान लगाते हुए, आप किसी अन्य तालिका से श्रेणियां और संबंधित पंक्तियों की संख्या चाहते हैं जहां category_id मेल खाता है। यहां ऐसी SQL क्वेरी का एक उदाहरण दिया गया है:

    $db->pquery("SELECT c.`category_id`, c.`category_name`, COUNT(*) AS `count`
    FROM `database_categorys` AS c 
    LEFT OUTER JOIN `other_table` AS t ON t.category_id = c.category_id
    GROUP BY c.category_id
    ORDER BY c.`category_name` ASC");
    

जॉइन SQL का एक मूलभूत हिस्सा हैं। यदि आप जॉइन का उपयोग करना सीखे बिना SQL का उपयोग करने का प्रयास करते हैं, तो यह while का उपयोग करना सीखे बिना PHP का उपयोग करने जैसा है लूप।

यहां प्रारंभ करें:एक दृश्य व्याख्या एसक्यूएल जुड़ता है



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP के माध्यम से SSH के माध्यम से एक mysql डेटाबेस से कनेक्ट करें

  2. क्या t1, b2 को छोड़कर ड्रॉप टेबल जैसी किसी चीज़ को लागू करने के लिए कोई MySQL कमांड है?

  3. mysql.h फ़ाइल नहीं मिल सकती है

  4. php का उपयोग करके डीबी में HTML कोड कैसे डालें?

  5. MySQL के साथ PHP के माध्यम से एक INSERT में दिनांक और समय टिकट कैसे जोड़ें?