वर्डप्रेस SQL ​​- पोस्ट श्रेणी और टैग

Sep 02 2020

मैंने उनकी श्रेणी और टैग के साथ पोस्ट प्राप्त करने के लिए इस क्वेरी का उपयोग किया।

SELECT
    p.id,
    p.post_name,
    c.name,
    GROUP_CONCAT(t.`name`)
FROM wp_posts p
JOIN wp_term_relationships cr
    on (p.`id`=cr.`object_id`)
JOIN wp_term_taxonomy ct
    on (ct.`term_taxonomy_id`=cr.`term_taxonomy_id`
    and ct.`taxonomy`='category')
JOIN wp_terms c on
    (ct.`term_id`=c.`term_id`)
JOIN wp_term_relationships tr
    on (p.`id`=tr.`object_id`)
JOIN wp_term_taxonomy tt
    on (tt.`term_taxonomy_id`=tr.`term_taxonomy_id`
    and tt.`taxonomy`='post_tag')
JOIN wp_terms t
    on (tt.`term_id`=t.`term_id`)
GROUP BY p.id

यह Wordpress SQL से है: पोस्ट श्रेणी और टैग प्राप्त करें

लेकिन मेरे पास एक समस्या है, क्वेरी टैग के बिना पोस्ट को अनदेखा करती है । मैंने कई अन्य प्रश्नों की कोशिश की लेकिन कोई भी SUCSSES नहीं। क्या कोई मेरी मदत कर सकता है?

जवाब

1 O.Jones Sep 02 2020 at 02:16

आप अपनी समस्या के अच्छे समाधान के बहुत करीब हैं।

एक अन्य उत्तरदाता ने इसका उल्लेख किया: उपयोग करें LEFT JOIN। क्यों? साधारण आंतरिक JOINपहली तालिका से पंक्तियों को दबाता है जो दूसरी तालिका से पंक्तियों से मेल नहीं खाता है।

आपका कोड GROUP BY को MySQL के कुख्यात विस्तार का दुरुपयोग करने के संकेत भी दिखाता है । अगर आप कहते हैं

   SELECT id, name, value
     FROM tbl
    GROUP BY id, name

आप वास्तव में कह रहे हैं

  SELECT id, name, ANY_VALUE(value)
    FROM tbl
   GROUP BY id, name

दूसरे शब्दों में, सर्वर valueसमूह के भीतर से जो कुछ भी चाहता है उसे उठाता है । आपको MAX(value)या जैसे पूर्वानुमानित कुल परिणाम का उपयोग करना चाहिए GROUP_CONCAT(value)। MySQL के संस्करण 8 और अन्य बनाता है और SQL टेबल सर्वर के मॉडल आपके द्वारा उपयोग किए गए सिंटैक्स को अस्वीकार कर देते हैं।

जब तक वे एसक्यूएल में आरक्षित शब्द नहीं हैं तब तक अपने विवेक की खातिर प्रो टिप टेबल या कॉलम नामों के चारों ओर बैकटिक्स का उपयोग नहीं करते हैं। और, प्रो टिप , तालिका या स्तंभ नामों के लिए आरक्षित शब्दों का उपयोग न करें।

इसके बजाय इस क्वेरी का उपयोग करें।

SELECT
    p.id,
    p.post_name,
    GROUP_CONCAT(c.name ORDER BY c.name) categories,
    GROUP_CONCAT(t.name ORDER BY t.name) tags
FROM wp_posts p
LEFT JOIN wp_term_relationships cr
    on (p.id=cr.object_id)
LEFT JOIN wp_term_taxonomy ct
    on (ct.term_taxonomy_id=cr.term_taxonomy_id
    and ct.taxonomy='category')
LEFT JOIN wp_terms c on
    (ct.term_id=c.term_id)
LEFT JOIN wp_term_relationships tr
    on (p.id=tr.object_id)
LEFT JOIN wp_term_taxonomy tt
    on (tt.term_taxonomy_id=tr.term_taxonomy_id
    and tt.taxonomy='post_tag')
LEFT JOIN wp_terms t
    on (tt.term_id=t.term_id)
GROUP BY p.id, p.post_name
2 Atif Sep 02 2020 at 01:49

आपके सभी जोड़ आंतरिक जोड़ हैं इसलिए यदि डेटा किसी भी तालिका में मेल नहीं खा रहा है तो उस डेटा को प्राप्त नहीं किया जाएगा।

अपने आंतरिक जोड़ को बाएँ / दाएँ बाहरी जोड़ से बदलें।