Meta_query so sánh giải thích toán tử


37

Tôi nhận thấy rằng có rất nhiều toán tử có thể được sử dụng để so sánh trong meta_query. Tuy nhiên, tôi không chắc chắn tôi nên sử dụng toán tử nào, nó hơi khó hiểu như thế nào =LIKEtoán tử.

Tôi muốn biết chính xác ý nghĩa của từng toán tử và trong điều kiện nào tôi nên sử dụng chúng.

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

Cảm ơn.

Câu trả lời:


50

Một số công việc đầu tiên về như bạn mong đợi:

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

LIKENOT LIKElà các toán tử SQL cho phép bạn thêm các ký hiệu đại diện, vì vậy bạn có thể có một truy vấn meta trông như thế này:

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

Điều này sẽ trả về tất cả các bài đăng trong đó "tên" giá trị meta có chuỗi "Pat". Trong trường hợp này, "Pat" "Patricia" và "Patrick" sẽ được trả lại cho bạn. Có một lời giải thích hướng dẫn không phải WordPress ở đây .

Thêm ký tự đại diện %là không cần thiết, bởi vì nó được thêm theo mặc định như @Herb đã nói trong câu trả lời dưới đây của anh ấy . Như thế này: $meta_value = '%' . like_escape( $meta_value ) . '%';- xem nguồn .

INNOT INchọn bất kỳ kết quả khớp nào trong (hoặc không nằm trong) mảng đã cho. Vì vậy, bạn có thể làm một cái gì đó như thế này:

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

và nó sẽ nhận được tất cả các bài đăng có màu được đặt thành đỏ, xanh lá cây hoặc xanh dương. Sử dụng 'KHÔNG VÀO' sẽ ngược lại, bất kỳ bài đăng nào có giá trị được đặt thành bất kỳ thứ gì khác ngoài những gì trong mảng.

SQL được tạo cho cái này sẽ trông giống như thế này:

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

BETWEENNOT BETWEENcho phép bạn xác định một phạm vi các giá trị có thể đúng và yêu cầu bạn đưa ra hai giá trị trong một mảng trong meta_query của bạn:

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

Điều này sẽ giúp bạn có tất cả các bài đăng có giá trong khoảng từ 20 đến 30. Người này đào sâu vào một ví dụ với ngày.

NOT EXISTSgiống như những gì nó phát ra - giá trị meta không được đặt hoặc được đặt thành giá trị null. Tất cả những gì bạn cần cho truy vấn đó là toán tử khóa và so sánh:

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

Người này cần truy vấn các giá trị meta không tồn tại và cần chúng để chơi đẹp với người khác.

Hi vọng điêu nay co ich!


Lưu ý: Nếu bạn đang sử dụng meta_querymảng, các khóa của bạn không nên được thêm tiền tố meta_. Nếu bạn đang sử dụng $query->meta_key, $query->meta_valuev.v. thì những thứ này vẫn nên giữ lại tiền tố.
Sean

Tôi dường như không thể tìm thấy một lời giải thích về những gì tùy chọn so sánh "IN" làm. Bất cứ ý tưởng làm thế nào mà làm việc?
Joe

1
@Joe, tôi không biết tại sao tôi không thêm bất cứ điều gì về "IN" và "KHÔNG IN". Tôi đã chỉnh sửa và cập nhật câu trả lời với những so sánh đó.
Jen

7

Lưu ý rằng khi sử dụng giá trị meta_compare là 'THÍCH', WordPress sẽ tự động bao bọc ký tự đại diện (%) xung quanh chuỗi meta_value. Vì vậy, ví dụ 'Pat%' có thể không trả về bất kỳ kết quả nào.


Có thông tin nào về điều đó trong tài liệu ở đâu đó Herb không? Có nên thay đổi ví dụ để loại bỏ %?
Jen

Nó nên, tôi thực sự đã làm điều đó ngay bây giờ, xem nguồn , sau đó rất rõ ràng rằng Herb là đúng. @guiniveretoo
Nicolai
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.