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'
)

Це поверне всі записи, де мета-значення "name" має рядок "Pat". У цьому випадку "Пат", "Патрісія" та "Патрік" всі вам повернуть. Там це не-WordPress підручник пояснення тут .

Додавання символу підстановки %не потрібно, оскільки воно додається за замовчуванням, як, наприклад, @Herb сказав у своїй нижчій відповіді . $meta_value = '%' . like_escape( $meta_value ) . '%';Ось так : - див. Джерело .

INі NOT INвиберіть будь-які збіги, що знаходяться в (або не в) даному масиві. Отже, ви можете зробити щось подібне:

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

і вони отримають усі повідомлення, у яких колір має бути червоним, зеленим або синім. Використання "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
@Joe, я не знаю, чому я нічого не додав про "IN" та "NOT IN". Я відредагував і оновив відповідь на цих порівняннях.
Джен

7

Зауважте, що при використанні значення meta_compare 'LIKE' WordPress автоматично обертає символ підстановки (%) навколо рядка meta_value. Тож приклад "Pat%" не міг повернути жодних результатів.


є інформація про це в документах десь Герб? Чи повинен змінити приклад для видалення %?
Джен

Потрібно, я насправді зробив це прямо зараз, подивіться джерело , тоді стає зрозуміло, що Герб має рацію. @guiniveretoo
Ніколай
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.