क्वेरी कई मेटा कुंजी मान?


22

समान कुंजी के साथ म्यूटेंट मेटा कुंजी मान के लिए क्वेरी कैसे करें

$querystr = "  
            SELECT $wpdb->posts.* 
            FROM $wpdb->posts, $wpdb->postmeta
            WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id 

            AND $wpdb->postmeta.meta_key = 'key1'   
            AND $wpdb->postmeta.meta_value = 'value1'
            // why doesn't this work?
            AND $wpdb->postmeta.meta_value = 'value2'

            AND $wpdb->posts.post_status = 'publish' 
            AND $wpdb->posts.post_type = 'post'
            ORDER BY $wpdb->posts.post_date DESC
                ";

अगला कोड

<?php 
$args = array(
    'meta_query' => array(
        array(
            'key' => 'key1',
            'value' => 'value1',
            'compare' => '='
        ),
// this array results in no return for both arrays
        array(
            'key' => 'key1',
            'value' => 'value2',
            'compare' => '='
        )
    )
);
$the_query  = new WP_Query( $args );
 ?>

                <?php /* Start the Loop */ ?>
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>

                    <?php get_template_part( 'content', get_post_format() ); ?>

                <?php endwhile; ?>

जवाबों:


31

मुझे ऐसा लग रहा है कि यहाँ एक और / या भ्रम चल रहा है।

ओपी में क्वेरीज़ केवल उन पोस्ट्स को लौटाएगी जिनमें key1 = 'value1' और key2 = 'value2' दोनों हैं। अधिकांश WP प्लगइन्स (जो मुझे पता है, वैसे भी) एक ही कुंजी का उपयोग करके, एक ही पोस्ट के लिए, पोस्टमेटा में कई मूल्यों को संग्रहीत नहीं करते हैं।

यदि आप जो चाहते हैं वह वास्तव में एक है (या आप वे पद प्राप्त करना चाहते हैं जहां key1 = 'value1', साथ ही साथ वे पद जहाँ key1 = 'value2') हैं, तो @ 'व्हिस्कर्स्विच' का उत्तर देखें, जिसमें 'IN' और मानों की एक सरणी का उपयोग किया गया है। मान पैरामीटर के लिए।

वैकल्पिक रूप से, आप relation'meta_query' को एक पैरामीटर प्रदान कर सकते हैं :

$args = array(
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => 'key1',
            'value' => 'value1',
            'compare' => '='
        ),

        array(
            'key' => 'key1',
            'value' => 'value2',
            'compare' => '='
        )
    )
);

ध्यान दें कि एक ही कुंजी का उपयोग करके या एक से अधिक मेटा प्रश्नों के संबंध के रूप में उपयोग करना INएक एकल के लिए उपयोग करने के कार्यात्मक समकक्ष और मूल्यों की एक सरणी है।


इसके लिए धन्यवाद, बूने। मुझे नहीं पता था कि "संबंध" परम अस्तित्व में था। मेरी मदद की।
मैथ्समैथ

यह काम करता है यदि आपके पास केवल एक कुंजी है जिस पर खोज करनी है। यदि आपके पास दो या अधिक हैं, तो आपको उन्हें संबंध पैरामीटर में संयोजित करने के लिए 'AND' का उपयोग करने की आवश्यकता हो सकती है, जिस स्थिति में @ WhiskerSandwich का जवाब नीचे दिया गया है, बेहतर है।
सिनिस्टरबर्ड

14

मैं एक ही समस्या है जहाँ एक ही कुंजी के लिए कई सरणियों से गुजर रहा था काम नहीं कर रहा था। इसके बजाय, बस एक सरणी का उपयोग करें, मानों की एक सरणी के लिए 'मान' सेट करें और IN में 'तुलना' सेट करें:

<?php

$args = array(
    'meta_query' => array(
        array(
            'key' => 'key1',
            'value' => array('value1', 'value2'),
            'compare' => 'IN'
        ),
    )
);
$query = new WP_Query( $args );

?>

1

आपको दूसरे मूल्य के लिए पोस्टमैट टेबल को उर्फ ​​करना होगा:

$querystr = "  
        SELECT $wpdb->posts.* 
        FROM $wpdb->posts, $wpdb->postmeta, $wpdb->postmeta AS mt1
        WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id 

        AND $wpdb->postmeta.meta_key = 'key1'   
        AND $wpdb->postmeta.meta_value = 'value1'
        AND mt1.meta_key = 'key1'
        AND mt1.meta_value = 'value2'

        AND $wpdb->posts.post_status = 'publish' 
        AND $wpdb->posts.post_type = 'post'
        ORDER BY $wpdb->posts.post_date DESC
            ";

आप इसे 3.1 से अब भी कर सकते हैं meta_query:

$args = array(
    'meta_query' => array(
        array(
            'key' => 'key1',
            'value' => 'value1',
            'compare' => '='
        ),
        array(
            'key' => 'key1',
            'value' => 'value2',
            'compare' => '='
        )
    )
);
$query = new WP_Query( $args );

हाय मिलो जवाब देने के लिए धन्यवाद। SQL कोई मान नहीं देता है। और सरणी कोई मूल्य नहीं लौटा रहा है जब तक कि मैं 2 कुंजी और मान को सरणी से नहीं हटाता। तो क्या यह बगिया है?
5:27 पर रानी

@steen - मुझे यकीन नहीं है कि आपका मुद्दा क्या है, मैंने दोनों विधियों का परीक्षण किया है और वे मेरी 3.3.1 की स्थापना में काम कर रहे हैं। क्या आपकी कुंजी का शाब्दिक रूप से 'की 1' और मूल्य 'मूल्य 1' और 'मूल्य 2' हैं? यदि आप print_r( $the_query );क्वेरी के तुरंत बाद कुछ भी नहीं देखते हैं ?
मिलो

0

कुंजी की 1 है और मान 'वैल्यू 1' और 'वैल्यू 2' ने इसे पाठ और संख्यात्मक दोनों में बीस ग्यारह के साथ नए सिरे से स्थापित करने की कोशिश की। Print_r ($ the_query); काम उत्पादन सामान्य लग रहा है। इसके अलावा key1 की कोशिश की और key2 भी काम नहीं करता है। यह काम करता है जैसे ही मैं इसे एक सरणी में सीमित करता हूं। विभिन्न ब्राउज़रों के साथ जांच की गई।

हालांकि यह काम करता है।

    <?php 
$args = array(
    'meta_query' => array(
        array(
            'key' => 'wtf',
            'value' => '1',
            'compare' => '>='
        ),
// this array results in no return for both arrays
        array(
            'key' => 'wtf',
            'value' => '2',
            'compare' => '<='
        )
    )
);
$the_query  = new WP_Query( $args );

 ?>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.