問題描述
我注意到有一堆操作可以用於比較 meta_query 。但是,我不太清楚我應該使用什麼作業系統,像=和 LIKE 運運算元一樣令人困惑。
我想知道每個操作者的意思是什麼,在什麼情況下我應該使用它們。
=
!=
>
>=
<
<=
LIKE
NOT LIKE
IN
NOT IN
BETWEEN
NOT BETWEEN
NOT EXISTS
謝謝。
最佳解決方案
最初的幾件工作就像你所期望的那樣:
= equals
!= does not equal
> greater than
>= greater than or equal to
< less than
<= less than or equal to
LIKE 和 NOT LIKE 是允許您新增 wild-card 符號的 SQL 運運算元,因此您可以使用如下所示的元查詢:
array(
'key' => 'name',
'value' => 'Pat',
'compare' => 'LIKE'
)
這將返回元值”name” 具有字串”Pat” 的所有帖子。在這種情況下,”Pat” “Patricia” 和”Patrick” 都將返回給您。有一個 non-WordPress 教程說明 here 。
新增萬用字元% 是沒有必要的,因為預設情況下它被新增為 @Herb 在他的下面的 answer 中說。像這樣:$meta_value = '%' . like_escape( $meta_value ) . '%'; – 見 source 。
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 允許您定義一系列可能正確的值,並要求您在 meta_query 中的陣列中給出兩個值:
array(
'key' => 'price',
'value' => array(20,30)
'compare' => 'BETWEEN'
)
這將讓你的所有帖子的價格在 20 和 30 之間。 This person 挖掘一個例子與日期。
NOT EXISTS 就像聽起來一樣 – 元值不設定或設定為空值。所有您需要的查詢是關鍵和比較運運算元:
array(
'key' => 'price',
'compare' => 'NOT EXISTS'
)
This person 需要查詢 non-existant 元值,並需要與其他人一起玩。
希望這可以幫助!
次佳解決方案
請注意,當使用’LIKE’ 的 meta_compare 值時,WordPress 會自動將萬用字元 (%) 包裝在 meta_value 字串周圍。因此,’Pat%’ 示例可能無法返回任何結果。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。