যেখানে মেটা কী উপস্থিত নেই সেখানে সমস্ত পোস্টের অনুসন্ধান করুন


50

আমি যেখানে সুনির্দিষ্ট meta_keyঅস্তিত্ব নেই তার সমস্ত পোস্ট পুনরুদ্ধার করার জন্য একটি কোয়েরি পাওয়ার চেষ্টা করছি এবং তারপরে এটি তৈরি করব।

আমি যে ক্যোয়ারীটি পরীক্ষা করে যাচ্ছি সেগুলি কাজ করছে বলে মনে হচ্ছে না বলে এই পোস্টগুলি খুঁজে পেতে আমার সমস্যা হচ্ছে।

এই পোস্টগুলি পাওয়ার চেষ্টা করার জন্য আমি কোডটি ব্যবহার করছি:

$args = array(
   'posts_per_page' => 18,
   'cat'=>1955,
   'post_status'=>'publish',
   'meta_query' => array(
                  array(
                     'key' => 'colors',
                     'compare' => 'NOT EXISTS'
                  ),
   ));      

query_posts($args);

কীটির সাথে কোনও পোস্ট না থাকলে এটি কিছুই দেয় না colors, তবে যখনই কীটি উপস্থিত থাকে তখনই idsকী দিয়ে পোস্টগুলিতে তাদের ফিরিয়ে দেয় colors(আমার যা প্রয়োজন তার বিপরীতে)। আমি EXISTপরিবর্তে চেষ্টা করেছিলাম কিন্তু ভাগ্য নেই।

কেউ যদি আমার প্রয়োজন মতো ক্যোয়ারী তৈরির সঠিক উপায়ে আমাকে টিপ দিতে পারে তবে আমি এটির প্রশংসা করব।

ধন্যবাদ!


আপনি ওয়ার্ডপ্রেসের কোন সংস্করণ ব্যবহার করছেন?
s_ha_dum

হাই, বাদ দেওয়ার জন্য দুঃখিত। আমি v3.5 ব্যবহার করছি
JordanBel

দেখে মনে হচ্ছে যে এই ধরণের ক্যোয়ারী (তুলনা না করে অস্তিত্বের সাথে সেট করুন) 3.5 এ যুক্ত হয়েছিল, সুতরাং এটি যতদূর দেখা যায় ততই কাজ করা উচিত। এটি কাস্টম নির্বাচন
বাছাইয়ের

ধন্যবাদ আমি নির্বাচন ব্যবহার করার চেষ্টা করব। কোন টেবিলগুলি কোয়েরি করতে হবে এবং কীভাবে ক্যোয়ারীটি মেনে চলতে হবে তার আগে অবশ্যই আমার অবশ্যই শিখতে হবে :(
জর্ডানবেল

খুব অদ্ভুত. আমি সেই কোডটিতে কোনও সমস্যা চিহ্নিত করতে পারি না এবং আপনি 3.5+ ব্যবহার করছেন, এই কারণেই আমি জিজ্ঞাসা করেছি। আপনার ডেটা আপনি যেভাবে মনে করেন সেভাবে প্রবেশ করা হচ্ছে তা নিশ্চিত করার জন্য আপনি কি ডাটাবেসটি দেখেছেন?
s_ha_dum

উত্তর:


73

আমি এটি দিয়ে আরও কিছু পরীক্ষা করেছি, এবং সততার সাথে এটি কার্যকর না করার কারণ খুঁজে পাচ্ছি না (যদি না উপরের কোডটি কেবল একটি স্নিপেট না হয় এবং আসল কোডটি নীচে আমার উদাহরণগুলিতে ফিট করে না)। তবে আমি কয়েকটি জিনিস আবিষ্কার করেছি যা আপনাকে সঠিক দিকে নিয়ে যেতে পারে।

1) নিজেই, এই মেটা ক্যোয়ারীটি "রঙগুলি IS NULL" এর সমতুল্য, অর্থাৎ এটি পোস্টমেটা সারণীতে কী কী সেট নেই এমন পোস্টগুলি ফিরিয়ে দেবে। এটি উপরে প্রদর্শিত কেসটি এবং এটির কাজ করা উচিত ছিল।

'meta_query' => array(
    array(
     'key' => 'colors',
     'compare' => 'NOT EXISTS' // this should work...
    ),
)

2) ওয়ার্ডপ্রেস 3.9 এর আগে 'সম্পর্ক' সূচকে 'ওআর' স্থাপন করে এই অবস্থার পরিবর্তন করে। এটি বিপরীতে ফিরে আসে। আমাকে জিজ্ঞাসা করবেন না কেন। একাধিক মেটা প্রশ্নগুলি করার সময় এটি বিশেষত গুরুত্বপূর্ণ। এর অর্থ হল যে 'রঙ' কী আছে সেগুলিতে 'নীল' (বা যাই হোক না কেন) সেট করা বা একেবারেই সেট না করা পোস্টগুলির জন্য কোনও কোয়েরি করা প্রাথমিকভাবে সম্ভব নয়। নীচের ক্যোয়ারীটি প্রথম শর্তটিকে উপেক্ষা করবে এবং কেবল দ্বিতীয় শর্তের সাথে মেলে এমনগুলি ফিরিয়ে দেবে।

'meta_query' => array(
   'relation' => 'OR',
    array(
     'key' => 'colors',
     'compare' => 'NOT EXISTS' // doesn't work
    ),
    array(
     'key' => 'colors',
     'value' => 'blue'
    )
)

3) তবে, আমরা যদি 'মান' সেট করি তবে আমরা প্রথম শর্তটি ব্যবহার করে ওয়ার্ডপ্রেসকে বোকা বানাতে পারি। এটির জন্য কোনও প্রাসঙ্গিক মানের প্রয়োজন নেই (এটি আমি এড়িয়ে যাব, যতক্ষণ না আমি জানি), তবে শর্তটির কোনও প্রভাব পড়ার জন্য এটি সেট করা দরকারNOT EXISTS

'meta_query' => array(
   'relation' => 'OR',
    array(
     'key' => 'colors',
     'compare' => 'NOT EXISTS', // works!
     'value' => '' // This is ignored, but is necessary...
    ),
    array(
     'key' => 'colors',
     'value' => 'blue'
    )
)

ওয়ার্ডপ্রেস ৩.৯ পর্যন্ত এটি সত্য ছিল। আপনি যদি এখনও কোনও পুরানো সংস্করণ ব্যবহার করেন তবে এটি কার্যকরভাবে কাজ করতে পারে।


ধন্যবাদ! এবং দেরি জন্য দুঃখিত। আমি একটি কোয়েরি ব্যবহার করে শেষ করেছি, তবে আমি নিম্নলিখিত মুহুর্তগুলিতে আপনার সমাধানটি পরীক্ষা করব যাতে আমি ফিরে যেতে পারি এবং সম্ভবত যদি এই কাজটি আমরা অন্য কাউকে সহায়তা করতে পারি। আমি এটি চেক করার সাথে সাথে আপনাকে জানাবো will আবার ধন্যবাদ
জর্ডানবেল

ভাল লিখেছেন এবং নিশ্চিত করেছেন যে একটি খালি মান যুক্ত করা প্রত্যাশিত ফলাফল দেয়। আমি বলি এটি অনিচ্ছাকৃত, ট্র্যাক.ওয়ার্ডপ্রেস.আর.অর্গ.এর একটি চেহারা দেখার জন্য এটি ইতিমধ্যে টিকিট আছে কিনা, যদি তা না হয় তবে এটি পুনরুত্পাদনযোগ্য may
টেলর Dewey

ডাব্লুপি কে ট্রিক করার দুর্দান্ত ব্যাখ্যা এবং সমাধানের জন্য ধন্যবাদ :) এখানে আসতে কিছুটা সময় নিয়েছিল - তবে এখন আমি কমপক্ষে 10 বারের জন্য আপভোটটি ক্লিক করতে চাই (কেবল যদি আমি পারতাম;))
লরেম বানর

আমি যদি তুলনামূলক উপস্থিতি ব্যবহার করি তবে দুর্ভাগ্যবশত ডাব্লুপি এর নতুন সংস্করণগুলিতে মান উপেক্ষা করা হয় না (৪.২.২-তে পরীক্ষা করা হয়েছে)
ইগোর জেরোসিমিć

10
EXISTSএবং NOT EXISTS"বাগ" যা একটি মান নির্দিষ্ট করার প্রয়োজনীয়, ডাব্লু 3.9 সংশোধন করা হয়েছে
trex005

11

একটি কাস্টম ক্যোয়ারী ব্যবহার করে, এটি আমার পক্ষে কাজ করেছে:

SELECT * FROM wp_posts as posts
            WHERE   posts.post_type     = 'post'
            AND NOT EXISTS (
              SELECT * FROM `wp_postmeta`
               WHERE `wp_postmeta`.`meta_key` = "your_meta_key"
                AND `wp_postmeta`.`post_id`=posts.ID
            ) 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.