Meta_query membandingkan penjelasan operator

37

Saya perhatikan bahwa ada banyak operator yang dapat digunakan untuk membandingkan di meta_query. Namun, saya tidak begitu yakin operator apa yang harus saya gunakan, entah bagaimana membingungkan =dan LIKEoperator.

Saya ingin tahu apa sebenarnya arti setiap operator, dan dalam kondisi apa saya harus menggunakannya.

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

Terima kasih.

dev-jim
sumber

Jawaban:

50

Beberapa karya pertama tentang seperti yang Anda harapkan:

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

LIKEdan NOT LIKEadalah operator SQL yang memungkinkan Anda menambahkan simbol wild-card, sehingga Anda bisa memiliki kueri meta yang terlihat seperti ini:

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

Ini akan mengembalikan semua posting di mana nilai meta "nama" memiliki string "Pat". Dalam hal ini, "Pat" "Patricia" dan "Patrick" akan dikembalikan kepada Anda. Ada penjelasan tutorial non-WordPress di sini .

Menambahkan karakter wildcard %tidak perlu, karena akan ditambahkan secara default seperti @Herb mengatakan dalam jawabannya di bawah ini . Seperti ini: $meta_value = '%' . like_escape( $meta_value ) . '%';- lihat sumber .

INdan NOT INpilih setiap kecocokan yang ada di (atau tidak dalam) array yang diberikan. Jadi Anda bisa melakukan sesuatu seperti ini:

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

dan itu akan mendapatkan semua posting yang memiliki warna diatur ke merah, hijau, atau biru. Menggunakan 'NOT IN' mendapatkan kebalikannya, setiap tulisan yang memiliki nilai diatur ke hal lain selain apa yang ada dalam array.

SQL yang dihasilkan untuk ini akan terlihat seperti ini:

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

BETWEENdan NOT BETWEENmemungkinkan Anda untuk menentukan rentang nilai yang bisa benar, dan mengharuskan Anda untuk memberikan dua nilai dalam array di meta_query Anda:

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

Ini akan memberi Anda semua pos dengan harga antara 20 dan 30. Orang ini menggali contoh dengan tanggal.

NOT EXISTShanya seperti apa kedengarannya - nilai meta tidak disetel atau disetel ke nilai nol. Yang Anda butuhkan untuk permintaan itu adalah operator kunci dan pembanding:

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

Orang ini perlu kueri nilai meta yang tidak ada, dan membutuhkannya untuk bermain baik dengan orang lain.

Semoga ini membantu!

Jen
sumber
Catatan: Jika Anda menggunakan meta_queryarray, kunci Anda seharusnya tidak diawali dengan meta_. Jika Anda menggunakan $query->meta_key,, $query->meta_valuedll. Maka ini masih harus mempertahankan awalan.
Sean
Sepertinya saya tidak dapat menemukan penjelasan tentang apa yang dilakukan opsi perbandingan "IN". Adakah yang tahu cara kerjanya?
Joe
1
@ Jo, saya tidak tahu mengapa saya tidak menambahkan apa pun tentang "IN" dan "NOT IN". Saya telah mengedit dan memperbarui jawabannya dengan perbandingan-perbandingan itu.
Jen
7

Perhatikan bahwa ketika menggunakan nilai meta_compare dari 'LIKE', WordPress secara otomatis membungkus karakter wildcard (%) di sekitar string meta_value. Jadi contoh 'Pat%' bisa gagal mengembalikan hasil apa pun.

bobbingwide
sumber
apakah ada info tentang itu di dokumen di suatu tempat Herb? Haruskah contoh berubah untuk menghapus %?
Jen
Seharusnya, saya benar-benar melakukannya sekarang, melihat sumbernya , lalu menjadi sangat jelas bahwa Herb benar. @guiniveretoo
Nicolai