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

Mysql - अनुकूलन - एकाधिक group_concat और होने का उपयोग करके जुड़ता है

WHERE . का उपयोग करने के लिए क्वेरी को फिर से लिखें HAVING . के बजाय . क्योंकि WHERE लागू किया जाता है जब MySQL पंक्तियों पर खोज करता है और यह index. HAVING पहले से चयनित परिणाम को फ़िल्टर करने के लिए पंक्तियों का चयन करने के बाद लागू किया जाता है। HAVING डिज़ाइन द्वारा अनुक्रमणिका का उपयोग नहीं कर सकते हैं।
आप इसे कर सकते हैं, उदाहरण के लिए, इस तरह:

SELECT p.id, p.name, p.default_image_id, 
    GROUP_CONCAT( DISTINCT pc.colour_id ) AS product_colours, 
    GROUP_CONCAT( DISTINCT pt.tag_id ) AS product_tags, 
    GROUP_CONCAT( DISTINCT ps.tag_id ) AS product_sizes
FROM shop_products p
    JOIN shop_product_to_colours pc_test ON p.id = pc_test.product_id AND pc_test.colour_id = 18
    JOIN shop_products_to_tag pt_test ON p.id = pt_test.product_id AND pt_test.tag_id = 1
    JOIN shop_product_colour_to_sizes ps_test ON p.id = ps_test.product_id AND ps_test.tag_id = 17
    JOIN shop_product_to_colours pc ON p.id = pc.product_id
    JOIN shop_products_to_tag pt ON p.id = pt.product_id
    JOIN shop_product_colour_to_sizes ps ON p.id = ps.product_id
WHERE p.category_id =  '50'
GROUP BY p.id
ORDER BY p.name ASC

अपडेट करें

हम प्रत्येक तालिका में दो बार शामिल हो रहे हैं।
पहले यह जांचने के लिए कि क्या इसमें कुछ मान है (FIND_IN_SET से शर्त) ).
दूसरा जुड़ाव GROUP_CONCAT . के लिए डेटा तैयार करेगा तालिका से सभी उत्पाद मूल्यों का चयन करने के लिए।

अपडेट 2

जैसा कि @Matt Raines ने टिप्पणी की, अगर हमें GROUP_CONCAT के साथ सूची उत्पाद मानों की आवश्यकता नहीं है , क्वेरी और भी सरल हो जाती है:

SELECT p.id, p.name, p.default_image_id
FROM shop_products p
    JOIN shop_product_to_colours pc ON p.id = pc.product_id
    JOIN shop_products_to_tag pt ON p.id = pt.product_id
    JOIN shop_product_colour_to_sizes ps ON p.id = ps.product_id
WHERE p.category_id =  '50'
    AND (pc.colour_id = 18 AND pt.tag_id = 1 AND ps.tag_id = 17)
GROUP BY p.id
ORDER BY p.name ASC

यह तीन फ़िल्टर की गई विशेषताओं वाले सभी उत्पादों का चयन करेगा।



  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. MySQL और PHP के साथ सिंगल रो क्वेरी का उपयोग करें

  3. सी # का उपयोग कर mysql दिनांक समय प्रारूप

  4. मैं लेबल की 2x6 शीट बनाने के लिए TCPDF का उपयोग कैसे कर सकता हूं जिसमें कॉलम या तृतीय-पक्ष वर्गों का उपयोग किए बिना 2D बारकोड शामिल हैं?

  5. MySQL - TIMESTAMP के लिए डिफ़ॉल्ट मान(3)