2008-08-26 13 views
6

में विशिष्ट टैग/श्रेणियों के साथ पदों को चुनने के लिए यह एक बहुत ही विशिष्ट वर्डप्रेस में लागू किया mysql के बारे में सवाल है।कैसे वर्डप्रेस

मैं (चुनें) पोस्ट नहीं है कि विशिष्ट 'टैग' और विशिष्ट 'श्रेणियों' के हैं (दोनों कई) जो दिखाएगा एक प्लगइन विकसित करने के लिए कोशिश कर रहा हूँ

मैं इसे क्योंकि असंभव है बताया गया था जिस तरह से श्रेणियों और टैग जमा हो जाती है:

  1. wp_posts पोस्ट की एक सूचियों में शामिल है, प्रत्येक पोस्ट एक "आईडी"
  2. wp_terms (दोनों श्रेणी पदों की सूची शामिल है एस और टैग)। Eac अवधि एक TERM_ID
  3. wp_term_taxonomy उनके TERM_IDs साथ शब्दों की एक सूची है और (या तो एक श्रेणी या टैग)
  4. wp_term_relationships संघों betweens नियम और पदों
है उन में से हर एक के लिए एक वर्गीकरण परिभाषा है है

टैग "परमाणु" और "सौदे" के साथ सभी पोस्ट प्राप्त करने के लिए मैं तालिकाओं में कैसे शामिल हो सकता हूं जो "श्रेणी 1" श्रेणी से संबंधित हैं?

उत्तर

3

मैंने आपको गलत समझा। मैंने सोचा कि आप परमाणु या सौदे चाहते थे। नीचे आपको केवल परमाणु और सौदे देना चाहिए।

select p.* 
from wp_posts p, wp_terms t, wp_term_taxonomy tt, wp_term_relationship tr, 
wp_terms t2, wp_term_taxonomy tt2, wp_term_relationship tr2 
wp_terms t2, wp_term_taxonomy tt2, wp_term_relationship tr2 

where p.id = tr.object_id and t.term_id = tt.term_id and tr.term_taxonomy_id = tt.term_taxonomy_id 

and p.id = tr2.object_id and t2.term_id = tt2.term_id and tr2.term_taxonomy_id = tt2.term_taxonomy_id 

and p.id = tr3.object_id and t3.term_id = tt3.term_id and tr3.term_taxonomy_id = tt3.term_taxonomy_id 

and (tt.taxonomy = 'category' and tt.term_id = t.term_id and t.name = 'Category1') 
and (tt2.taxonomy = 'post_tag' and tt2.term_id = t2.term_id and t2.name = 'Nuclear') 
and (tt3.taxonomy = 'post_tag' and tt3.term_id = t3.term_id and t3.name = 'Deals') 
2

क्या सकल डीबी संरचना है।

वैसे भी, मैं ऐसा कुछ करूंगा (नोट मैं जुड़ने के लिए EXISTS पसंद करता हूं, लेकिन यदि आप चाहें तो उन्हें जुड़ने के रूप में फिर से लिख सकते हैं; अधिकांश क्वेरी विश्लेषक उन्हें वही क्वेरी योजना में पतन कर देंगे)। आप कुछ अतिरिक्त करतब दिखाने का एक तरीका यह करना है या किसी अन्य के लिए यह काम करने के लिए कर सकते हैं ...

SELECT * 
    FROM wp_posts p 
WHERE EXISTS(SELECT * 
       FROM wp_term_relationship tr 
       WHERE tr.object_id = p.id 
        AND EXISTS(SELECT * 
           FROM wp_term_taxonomy tt 
           WHERE tt.term_taxonomy_id = tr.term_taxonomy_id 
           AND tt.taxonomy   = 'category' 
           AND EXISTS(SELECT * 
               FROM wp_terms t 
               WHERE t.term_id = tt.term_id 
               AND t.name = "Category1" 
              ) 
          ) 
        AND EXISTS(SELECT * 
           FROM wp_term_taxonomy tt 
           WHERE tt.term_taxonomy_id = tr.term_taxonomy_id 
           AND tt.taxonomy   = 'post_tag' 
           AND EXISTS(SELECT * 
               FROM wp_terms t 
               WHERE t.term_id = tt.term_id 
               AND t.name = "Nuclear" 
              ) 
           AND EXISTS(SELECT * 
               FROM wp_terms t 
               WHERE t.term_id = tt.term_id 
               AND t.name = "Deals" 
              ) 
          ) 
      ) 
1

इस प्रयास करें:

select p.* 
from wp_posts p, 
wp_terms t, wp_term_taxonomy tt, wp_term_relationship tr 
wp_terms t2, wp_term_taxonomy tt2, wp_term_relationship tr2 

where p.id = tr.object_id 
and t.term_id = tt.term_id 
and tr.term_taxonomy_id = tt.term_taxonomy_id 

and p.id = tr2.object_id 
and t2.term_id = tt2.term_id 
and tr2.term_taxonomy_id = tt2.term_taxonomy_id 

and (tt.taxonomy = 'category' and tt.term_id = t.term_id and t.name = 'Category1') 
and (tt2.taxonomy = 'post_tag' and tt2.term_id = t2.term_id and t2.name in ('Nuclear', 'Deals')) 

अनिवार्य रूप से मैं उचित बच्चे तालिकाओं के 2 प्रतियां रोजगार कर रहा हूँ - शर्तों , term_taxonomy, और term_relationship। एक प्रति 'श्रेणी 1' प्रतिबंध लागू करती है, दूसरा 'परमाणु' या 'सौदे' प्रतिबंध लागू होता है।

बीटीडब्ल्यू, परमाणु सौदों के बारे में सभी पदों के साथ यह किस तरह की परियोजना है? आप हमें कुछ सरकारी सूची में लाने की कोशिश कर रहे हैं? ;)

1

तो मैंने अपने वर्डप्रेस डीबी पर दोनों विकल्पों की कोशिश की। मैंने टैग "पर्ल" और "प्रोग्रामिंग" टैग के साथ अपनी पोस्ट में "टेक" श्रेणी की तलाश की।

Eric's प्रारंभिक चयन कथन में एक लापता कॉमा जोड़ने के बाद काम किया। यह 3 रिकॉर्ड लौटा। समस्या यह है कि "post_tag" की तलाश करने वाला अनुभाग वास्तव में एक OR विकल्प के रूप में काम कर रहा है। मेरी पोस्टों में से एक में केवल एक टैग नहीं था। चयन डिस्टिंट बनाने के लिए भी अच्छा होगा।

मैंने Matt's संस्करण की कोशिश की, लेकिन यह एक खाली सेट लौट रहा था। मैं इसके साथ "जुगल" करने की कोशिश कर सकता हूं।

0

धन्यवाद @ एरिक यह काम करता है!भविष्य में संदर्भ के लिए बस कुछ कोड सुधार:

wp_terms t2, wp_term_taxonomy tt2, wp_term_relationship 

tr2

होना चाहिए:

  • पहले चुनिंदा बयान
  • एक ही चयन statemt में निम्नलिखित परिवर्तन होना चाहिए wp_term_relationship TR2 के बाद कोमा याद करते हैं

    wp_terms t3, wp_term_taxonomy tt3, wp_term_relationship 
    
    tr3
0

वास्तव में बहुत अच्छा जवाब .. मुझे बहुत मदद मिली ..

महान bcoz।, यह मुझे मेरी जटिल क्वेरी बनाने के लिए बुनियादी दृष्टिकोण दिया! मेरे जैसे

एक छोटा सा सुधार, तैयार उपयोगकर्ताओं के लिए :)

"wp_term_relationship" 'त्रुटि मौजूद नहीं है' .. wp_term_relationships का उपयोग के रूप में यह सही तालिका नाम है दे देंगे।

धन्यवाद एरिक