Meta_query เปรียบเทียบคำอธิบายของโอเปอเรเตอร์


37

ฉันสังเกตเห็นว่ามีกลุ่มตัวดำเนินการที่สามารถใช้สำหรับการเปรียบเทียบใน meta_query อย่างไรก็ตามฉันไม่แน่ใจว่าโอเปอเรเตอร์ที่ฉันควรใช้คืออะไรมันสับสน=และ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 LIKEเป็นตัวดำเนินการ SQL ที่ให้คุณเพิ่มสัญลักษณ์ไวด์การ์ดดังนั้นคุณอาจมีคิวรีเมตาที่มีลักษณะดังนี้:

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

นี่จะส่งคืนโพสต์ทั้งหมดที่ค่าเมตา "ชื่อ" มีสตริง "Pat" ในกรณีนี้ "Pat" "Patricia" และ "Patrick" จะถูกส่งกลับมาให้คุณ มีไม่ใช่ WordPress กวดวิชาคำอธิบายที่เป็นที่นี่

เพิ่มอักขระตัวแทน%ไม่จำเป็นเพราะจะได้รับเพิ่มตามค่าเริ่มต้นเช่น @Herb กล่าวในด้านล่างของเขาคำตอบ เช่นนี้$meta_value = '%' . like_escape( $meta_value ) . '%';- ดูแหล่งที่มา

INและNOT INเลือกการแข่งขันใด ๆ ที่อยู่ใน (หรือไม่ได้อยู่) อาร์เรย์ที่กำหนด ดังนั้นคุณสามารถทำสิ่งนี้:

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

และจะได้รับโพสต์ทั้งหมดที่มีการตั้งค่าสีเป็นสีแดงสีเขียวหรือสีน้ำเงิน การใช้ 'ไม่ได้อยู่ใน' จะเป็นการย้อนกลับโพสต์ใด ๆ ที่มีค่าถูกตั้งค่าเป็นอย่างอื่นนอกเหนือจากที่อยู่ในอาร์เรย์

SQL ที่สร้างขึ้นสำหรับสิ่งนี้จะมีลักษณะดังนี้:

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

BETWEENและNOT BETWEENอนุญาตให้คุณกำหนดช่วงของค่าที่สามารถแก้ไขได้และต้องการให้คุณกำหนดค่าสองค่าในอาร์เรย์ใน meta_query ของคุณ:

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" ความคิดใด ๆ ที่ใช้งานได้อย่างไร
Joe

1
@ โจฉันไม่รู้ว่าทำไมฉันถึงไม่เพิ่มอะไรเกี่ยวกับ "IN" และ "NOT IN" ฉันแก้ไขและปรับปรุงคำตอบด้วยการเปรียบเทียบเหล่านั้น
Jen

7

โปรดทราบว่าเมื่อใช้ค่า meta_compare เป็น 'LIKE' WordPress จะล้อมอักขระไวด์การ์ด (%) ไว้รอบสตริง meta_value โดยอัตโนมัติ ดังนั้นตัวอย่าง 'Pat%' อาจล้มเหลวในการส่งคืนผลลัพธ์ใด ๆ


มีข้อมูลเกี่ยวกับสิ่งนั้นในเอกสารสมุนไพรแห่งหนึ่งไหม? ตัวอย่างควรเปลี่ยนเป็นลบ%หรือไม่
Jen

ฉันควรทำอย่างนั้นจริง ๆ ตอนนี้ดูแหล่งที่มาแล้วมันก็ชัดเจนว่าสมุนไพรนั้นถูกต้อง @guiniveretoo
Nicolai
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.