Meta_query ऑपरेटर स्पष्टीकरण की तुलना करता है


37

मैंने देखा कि ऑपरेटर के झुंड हैं जिनका उपयोग मेटा_क्वेरी में तुलना के लिए किया जा सकता है। हालाँकि, मुझे पूरा यकीन नहीं है कि मुझे किस ऑपरेटर का उपयोग करना चाहिए, यह किसी तरह =और LIKEऑपरेटर को भ्रमित कर रहा है ।

मैं जानना चाहता हूं कि प्रत्येक ऑपरेटर का वास्तव में क्या मतलब है, और मुझे किस हालत में उनका उपयोग करना चाहिए।

=
!=
>
>=
<
<=
LIKE
NOT LIKE
IN
NOT IN
BETWEEN
NOT BETWEEN
NOT EXISTS

धन्यवाद।

जवाबों:


50

आप जैसे पहले कई काम की उम्मीद करेंगे:

=   equals
!=  does not equal
>   greater than
>=  greater than or equal to
<   less than
<=  less than or equal to

LIKEऔर NOT LIKESQL ऑपरेटर हैं जो आपको वाइल्ड-कार्ड प्रतीकों में जोड़ते हैं, इसलिए आप एक मेटा क्वेरी हो सकते हैं जो इस तरह दिखती है:

array( 
    'key' => 'name', 
    'value' => 'Pat', 
    'compare' => 'LIKE'
)

यह उन सभी पदों को लौटाएगा जहां मेटा मान "नाम" में स्ट्रिंग "पैट" है। इस मामले में, "पैट" "पेट्रीसिया" और "पैट्रिक" सभी को आपके पास वापस लौटा दिया जाएगा। यहां एक गैर-वर्डप्रेस ट्यूटोरियल स्पष्टीकरण है

वाइल्डकार्ड वर्ण जोड़ना %आवश्यक नहीं है, क्योंकि यह डिफ़ॉल्ट रूप से जुड़ जाता है जैसे @ हर्फ ने अपने नीचे दिए गए उत्तर में कहा । इस तरह: $meta_value = '%' . like_escape( $meta_value ) . '%';- स्रोत देखें ।

INऔर NOT INदिए गए सरणी में (या नहीं) में होने वाले किसी भी मैच का चयन करें। तो आप ऐसा कुछ कर सकते हैं:

array(
    'key'     => 'color', 
    'value'   => array('red', 'green', 'blue') 
    'compare' => 'IN'
)

और यह उन सभी पोस्टों को प्राप्त करेगा, जिनका रंग लाल, हरा या नीला है। Using NOT IN ’के प्रयोग से उल्टा हो जाता है, ऐसी कोई भी पोस्ट जिनके पास ऐरे में क्या है इसके अलावा किसी और चीज़ के लिए एक मूल्य निर्धारित है।

इसके लिए उत्पन्न SQL कुछ इस तरह दिखाई देगी:

SELECT * FROM posts_meta WHERE value IN ("red", "green", "blue") 

BETWEENऔर NOT BETWEENआपको उन मानों की एक सीमा को परिभाषित करने की अनुमति देता है, जो सही हो सकते हैं, और आपको अपने मेटा_क्वेरीज़ में एक सरणी में दो मान देने की आवश्यकता होती है:

array( 
    'key' => 'price', 
    'value' => array(20,30) 
    'compare' => 'BETWEEN'
)

यह आपको उन सभी पोस्टों में मिलेगा जहां कीमत 20 और 30 के बीच है। यह व्यक्ति तारीखों के साथ एक उदाहरण में खोदता है।

NOT EXISTSयह वैसा ही है जैसा लगता है - मेटा मान सेट नहीं है या शून्य मान पर सेट है। आपको उस क्वेरी के लिए कुंजी और तुलना ऑपरेटर चाहिए:

array( 
    'key' => 'price', 
    'compare' => 'NOT EXISTS'
)

इस व्यक्ति को गैर-मौजूद मेटा मान क्वेरी करने की आवश्यकता थी, और उन्हें दूसरों के साथ अच्छा खेलने की आवश्यकता थी।

उम्मीद है की यह मदद करेगा!


नोट: यदि आप meta_queryसरणी का उपयोग कर रहे हैं , तो आपकी कुंजियों के साथ उपसर्ग नहीं होना चाहिए meta_। यदि आप आदि का उपयोग कर रहे हैं $query->meta_key, $query->meta_valueतो ये अभी भी उपसर्ग को बनाए रखना चाहिए।
शॉन

मुझे लगता है कि "IN" तुलना विकल्प क्या करता है, इस पर स्पष्टीकरण नहीं मिल सकता है। किसी भी विचार कैसे काम करता है?
जो

1
@ हाँ, मुझे नहीं पता कि मैंने "IN" और "NOT IN" के बारे में कुछ क्यों नहीं जोड़ा। मैंने उन तुलनाओं के साथ उत्तर को संपादित और अद्यतन किया है।
जेन

7

ध्यान दें कि 'LIKE' के एक मेटा_कम्पर मान का उपयोग करते समय, वर्डप्रेस मेटाटैल्यू स्ट्रिंग के चारों ओर वाइल्डकार्ड वर्ण (%) को स्वचालित रूप से लपेटता है। इसलिए 'पैट%' उदाहरण किसी भी परिणाम को वापस करने में विफल हो सकता है।


वहाँ के बारे में जानकारी है कि डॉक्स में कहीं हर्ब है? क्या उदाहरण को हटाने के लिए बदलना चाहिए %?
जेन

यह, मुझे वास्तव में अभी ऐसा करना चाहिए, स्रोत देखें , तो यह बहुत स्पष्ट हो जाता है कि हर्ब सही है। @guiniveretoo
निकोलई
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.