Meta_query operatörü açıklama karşılaştırmak


37

Meta_query'de karşılaştırma yapmak için kullanılabilecek bir operatör grubu olduğunu fark ettim. Ancak, hangi operatörü kullanmam gerektiğinden tam olarak emin değilim, bir şekilde kafa karıştırıcı =ve LIKEoperatör gibi .

Her operatörün tam olarak ne anlama geldiğini ve hangi koşullarda onları kullanmam gerektiğini bilmek istiyorum.

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

Teşekkürler.

Yanıtlar:


50

Sizin gibi hakkında ilk birkaç çalışma beklediğiniz:

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

LIKEve NOT LIKEjoker karakterler ekleyebilmenizi sağlayan SQL işleçleridir, böylece şöyle görünen bir meta sorgunuz olabilir:

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

Bu, "name" meta değerinin "Pat" dizesine sahip olduğu tüm gönderileri döndürür. Bu durumda, "Pat" "Patricia" ve "Patrick" hepsi size geri döndürülecekti. Burada WordPress'e ait olmayan bir öğretici açıklama var .

Joker karakter eklemek %gerekli değildir, çünkü varsayılan olarak @Herb'deki gibi cevap olarak eklenmiştir . Bunun gibi: $meta_value = '%' . like_escape( $meta_value ) . '%';- kaynağa bakınız .

INve NOT INverilen dizide olan veya olmayan dizileri seçin. Böylece böyle bir şey yapabilirsin:

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

ve rengi kırmızı, yeşil veya mavi olarak ayarlanmış tüm gönderileri alır. 'NOT IN' kullanarak, dizidekilerden başka bir şeye ayarlanmış bir değeri olan tüm gönderiler tam tersi olur.

Bunun için oluşturulan SQL şuna benzer:

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

BETWEENve NOT BETWEENdoğru olabilecek bir değer aralığı tanımlamanıza izin verir ve meta_query'nizdeki bir dizide iki değer vermenizi ister:

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

Bu, fiyatın 20 ile 30 arasında olduğu tüm gönderileri size ulaştıracaktır . Bu kişi , tarih içeren bir örneğe bakmaktadır.

NOT EXISTStıpkı göründüğü gibi - meta değeri ayarlanmamış veya boş bir değere ayarlanmış. Bu sorgu için ihtiyacınız olan tek şey anahtar ve karşılaştırma operatörüdür:

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

Bu kişinin var olmayan meta değerlerini sorgulaması ve başkalarıyla iyi oynamaları gerekiyordu.

Bu yardımcı olur umarım!


Not: meta_queryDizi kullanıyorsanız , tuşlarınızın önekleri olmamalıdır meta_. Eğer kullanıyorsanız $query->meta_key, $query->meta_valuevb daha sonra bu hala önek korumalıdır.
Sean,

"IN" karşılaştırma seçeneğinin ne yaptığı hakkında bir açıklama bulamıyorum. Nasıl çalıştığı hakkında bir fikrin var mı?
Joe

1
@Joe, neden "IN" ve "NOT IN" hakkında bir şey eklemediğimi bilmiyorum. Bu karşılaştırmalarla cevabı düzenledim ve güncelledim.
Jen

7

'LIKE' meta_compare değerini kullanırken, WordPress'in joker karakterini (%) otomatik olarak meta_value dizesinin etrafına sardığını unutmayın. Bu nedenle, 'Pat%' örneği herhangi bir sonuç veremedi.


Buradaki herhangi bir yerdeki doktorlarda bilgi var mı? Örnek kaldırmak için değişmeli %mi?
Jen

Olmalı, aslında şu anda bunu yaptım, kaynağa bakın , sonra da Herb'ün haklı olduğu çok netleşti. @guiniveretoo
Nicolai
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.