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

mysql परिणामों को श्रेणी के आधार पर समूहित करें और उन्हें प्रत्येक श्रेणी के अंतर्गत समूहों में प्रदर्शित करें

मैं ORDER BY category का उपयोग करूंगा बजाय। फिर आप परिणाम सेट को पुनरावृति कर सकते हैं जैसे

$old = null;
foreach ($st as $s) {
  if $old != $s['id']
    echo 'Main category';
    $old = $s['id'];
  echo 'subcategory'

अपडेट करें

इस थ्रेड में अब तक समस्या के तीन संभावित समाधान मौजूद हैं।

मूल विकल्प 1

SELECT * FROM content group by category
foreach
  SELECT * FROM content WHERE category=$cat['category']

यदि कोई प्रत्येक मूल श्रेणी को केवल एक बार प्राप्त करना चाहता है, तो उसे DISTINCT . का उपयोग करना चाहिए बजाय। किसी को GROUP BY का उपयोग नहीं करना चाहिए किसी भी एकत्रीकरण समारोह का उपयोग किए बिना। GROUP BY को मिलाना SELECT * . के साथ (ज्यादातर) MySQL तक सीमित है। आप इस मामले में ASNI SQL में मनमाना कॉलम नहीं चुन सकते हैं।

विकल्प 1 का एक प्रकार

SELECT DISTINCT category FROM content ORDER BY category
foreach
  SELECT * FROM content WHERE category=$cat['category']

यह DISTINCT . के साथ सही किया गया संस्करण है GROUP BY . के बजाय ।

इसमें अभी भी नेस्टेड क्वेरी कॉल का अभाव है। 5 मूल श्रेणियों के लिए, यह लूप में 5 प्रश्नों की ओर ले जाता है। 10 मूल श्रेणियों के लिए, अंदर पहले से ही 10 प्रश्न हैं। आम तौर पर इस तरह के बढ़ने से बचना चाहिए।

विकल्प 3

SELECT * FROM content ORDER BY category, menu_name

उपरोक्त कोड के साथ प्रयोग करने योग्य।

विभिन्न कारणों से दिखाए गए अन्य विकल्पों के लिए यह बेहतर है:

  • एक बार में सभी डेटा एकत्र करने के लिए आपको केवल एक एकल डेटाबेस क्वेरी की आवश्यकता है। डेटाबेस अपना अधिकांश समय प्रदान किए गए SQL कथन को पार्स करने में (आसान प्रश्नों पर) खर्च करता है और वास्तव में आपके द्वारा अनुरोधित डेटा एकत्र करने के लिए केवल कुछ ही समय व्यतीत करता है। यदि आप बहुत सारे SQL कोड प्रदान करते हैं, तो इसे पार्स करने में बहुत समय लगाना पड़ता है। यदि आप कम कोड प्रदान करते हैं, तो उसके पास करने के लिए कम है।
  • डेटाबेस के लिए डेटा को एक बार प्राप्त करना, उसे एक बार सॉर्ट करना और उसे एक बार आपको वापस करना आसान होता है, एक हिस्से को इकट्ठा करने के बजाय, एक भाग को सॉर्ट करें, एक हिस्सा वापस करें और फिर से शुरू करें।

अभी भी अघोषित विकल्प 4

अब तक एक अघोषित और समाधान मौजूद है। कोई भी तैयार किए गए कथनों का उपयोग कर सकता है, SQL एक बार तैयार करें और इसे विभिन्न आईडी के साथ चलाएं। यह अभी भी लूप के अंदर सभी श्रेणियों से पूछताछ करेगा, लेकिन हर बार SQL कोड को पार्स करने की आवश्यकता से बच जाएगा।

वास्तव में मुझे नहीं पता कि यह मेरे समाधान से बेहतर है या बुरा (या बीच में)।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 'उपयोगकर्ता' @ 'लोकलहोस्ट' के लिए प्रवेश निषेध

  2. मैं MySQL सर्वर पर बाहरी पहुँच को कैसे सक्षम करूँ?

  3. अद्वितीय यादृच्छिक अल्फ़ान्यूमेरिक वर्ण उत्पन्न करें जो 7 वर्ण लंबे हों

  4. जावास्क्रिप्ट से डेटा को mysql डेटाबेस में भेजें

  5. अलग-अलग समय क्षेत्रों में PHP सर्वर और MySQL सर्वर से निपटना