একাধিক মেটা কী মানগুলি জিজ্ঞাসা করবেন?


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

আমার মনে হচ্ছে এখানে কোনও AND / OR বিভ্রান্তি চলছে।

ওপি ক্যোয়ারীগুলি শুধুমাত্র পোস্ট যা আছে ফিরে আসবে উভয় key1 = 'মান 1' এবং key2 = 'VALUE2'। বেশিরভাগ ডাব্লুপি প্লাগইন (যেভাবেই আমি জানি, একই কী ব্যবহার করে) একই পোষ্টের জন্য পোস্টমেটে একাধিক মান সঞ্চয় করে না।

আপনি যা চান তা যদি সত্যিই একটি ওআর হয় (আপনি কী 1 = 'মান 1', সেইসাথে যে পোস্টগুলিতে কী 1 = 'মান 2' পেতে চান) তবে 'আইএন' ব্যবহার করে @ হুইস্কারস্যান্ডউইচের উত্তর দেখুন এবং মানগুলির একটি অ্যারে দেখুন মান পরামিতি জন্য।

বিকল্পভাবে, আপনি relation`meta_query 'এ একটি পরামিতি সরবরাহ করতে পারেন :

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

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

নোট করুন যে একই কী ব্যবহার করে একাধিক মেটা প্রশ্নের সাথে সম্পর্ক হিসাবে ওআর ব্যবহার করা হ'ল ব্যবহারের কার্যকরী সমতুল্য INএবং একক একটির জন্য মানের অ্যারে।


এই জন্য ধন্যবাদ, বুন। আমি জানি না যে "সম্পর্ক" পরমের অস্তিত্ব আছে। আমাকে সাহায্য করেছেন।
ম্যাথসম্যাথ

আপনার যদি অনুসন্ধানের জন্য কেবল একটি কী থাকে তবে এটি কাজ করে। আপনার যদি দু'একটি বা তার বেশি থাকে তবে আপনাকে সম্পর্কের প্যারামিটারে তাদের একত্রিত করতে 'ও' ব্যবহার করতে হতে পারে, সেক্ষেত্রে নীচে @ হুইস্কারস্যান্ডউইচের উত্তরটি আরও উপযুক্ত।
SinisterBeard

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 );

হাই মিলো উত্তর দেওয়ার জন্য ধন্যবাদ। এসকিউএল কোনও মূল্য দেয় না। আর অ্যারে থেকে ২ য় কী এবং মান সরিয়ে না দেওয়া হলে অ্যারে কোনও মানই ফেরৎ দিচ্ছে না। তাহলে কি এই বুগড?
12'12

@ সতের - আপনার সমস্যাটি কী তা আমি নিশ্চিত নই, আমি উভয় পদ্ধতি পরীক্ষা করেছি এবং তারা আমার ইনস্টলটিতে ৩.৩.১ এ কাজ করছে। আপনার কীটি আক্ষরিক 'কী 1' এবং মানগুলি 'মান 1' এবং 'মান 2'? আপনি print_r( $the_query );কোয়েরি অবিলম্বে যদি কিছু না দেখেন ?
মিলো

0

কী কী 1 এবং মানগুলি 'মান 1' এবং 'মান 2' এটিকে এগারটি এগারোটি দিয়ে একটি নতুন ইনস্টল করে পাঠ্য এবং সংখ্যাসূচক উভয়ই চেষ্টা করে। মুদ্রণ_আর (_ দি_উইকি); কাজ আউটপুট স্বাভাবিক দেখায়। কী 1 এবং কী 2 চেষ্টা করেও কার্যকর হয় না। আমি এটিকে একটি অ্যারেতে সীমাবদ্ধ করার সাথে সাথে এটি কাজ করে। বিভিন্ন ব্রাউজারের সাথে চেক করা হয়েছে।

এটি তবে কাজ করে।

    <?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 );

 ?>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.