メタキーが存在しないすべての投稿をクエリします
-
-
どのバージョンのWordPressを使用していますか?What version of WordPress are you using?
- 0
- 2013-01-12
- s_ha_dum
-
こんにちは、省略してすみません.私はv3.5を使用していますHi,sorry for the omission. I am using v3.5
- 0
- 2013-01-12
- JordanBel
-
そのタイプのクエリ(比較がNOT EXISTSに設定されている)が3.5で追加されたように見えるので、私が見る限り、そのまま機能するはずです.ただし、カスタムSELECTクエリを使用してそれを行うのは簡単です...It seems as though that type of query (with compare set to NOT EXISTS) was added in 3.5, so it should work as it is, as far as I can see. It would be easy to do it via custom SELECT query, though...
- 0
- 2013-01-12
- Tomas Buteler
-
ありがとう、selectを使ってみます.どのテーブルをクエリするか、クエリに準拠する方法を学ぶ必要があります:(Thanks I will try using select. I must learn before which tables to query and how to conform the query though :(
- 0
- 2013-01-12
- JordanBel
-
非常に奇妙な.私はそのコードの問題を見つけることができず、あなたは3.5+を使用しているので、私は尋ねました.実際にデータベースを調べて、データが思いどおりに挿入されていることを確認しましたか?Very strange. I can't spot a problem with that code and you are using 3.5+, which is why I asked. Have you actually looked at the database to confirm that your data is being inserted the way you think it is?
- 0
- 2013-01-13
- s_ha_dum
-
「EXISTS」を試しましたか?あなたは「EXIST」について言及しましたが、compareは最後に「S」が付いた「EXISTS」のみを受け入れると思います.Have you tried 'EXISTS'? You mentioned 'EXIST' but I believe compare only accepts 'EXISTS' with an 'S' on the end.
- 0
- 2013-01-13
- mikegertrudes
-
ありがとね.残念ながら、EXISTSも機能しませんでした.私が思うクエリオプションに行きます.Hi, thanks. Unfortunately EXISTS didn't work either. I will go to the query option I think.
- 0
- 2013-01-14
- JordanBel
-
3 回答
- 投票
-
- 2013-01-16
これを使ってさらにテストを行いましたが、正直なところ、機能しない理由を見つけることができません(上記のコードが単なるスニペットであり、実際のコードが以下の例に適合している場合を除く).しかし、私はあなたを正しい方向に導くかもしれないいくつかのことを発見しました.
1)このメタクエリ自体は、「colors IS NULL」と同等です.つまり、postmetaテーブルにそのキーが設定されていない投稿を返します.これは上記のケースであり、機能するはずです.
'meta_query' => array( array( 'key' => 'colors', 'compare' => 'NOT EXISTS' // this should work... ), )
2)WordPress 3.9より前は、「relation」インデックスを「OR」に設定すると、この条件が変更されます.逆を返します.理由を聞かないでください.これは、複数のメタクエリを実行する場合に特に重要です.つまり、最初は「colors」キーが「blue」(またはその他)に設定されているか、まったく設定されていない投稿に対してクエリを実行することはできません.以下のクエリは最初の条件を無視し、2番目の条件に一致するもののみを返します.
'meta_query' => array( 'relation' => 'OR', array( 'key' => 'colors', 'compare' => 'NOT EXISTS' // doesn't work ), array( 'key' => 'colors', 'value' => 'blue' ) )
3)ただし、「値」を設定すると、WordPressをだまして最初の条件を使用させることができます.関連する値は必要ありませんが(私が知る限り無視されます)、
NOT EXISTS
条件を有効にするには、設定する必要があります. .'meta_query' => array( 'relation' => 'OR', array( 'key' => 'colors', 'compare' => 'NOT EXISTS', // works! 'value' => '' // This is ignored, but is necessary... ), array( 'key' => 'colors', 'value' => 'blue' ) )
これはWordPress3.9まで当てはまりました.古いバージョンをまだ使用している場合、これは実行可能な回避策です.
I did some more testing with this, and honestly can't find a reason it wouldn't work (unless the code above is just a snippet and the real code fits on my examples below). I did, however, discover a couple of things that might lead you in the right direction.
1) By itself, this meta query is the equivalent of "colors IS NULL", i.e. it'll return the posts which don't have that key set in the postmeta table. This is the case shown above, and it should've worked.
'meta_query' => array( array( 'key' => 'colors', 'compare' => 'NOT EXISTS' // this should work... ), )
2) Prior to WordPress 3.9, establishing the 'relation' index to 'OR' changes this condition. It returns the opposite. Don't ask me why. This is especially important when doing multiple meta queries. That means that is not initially possible to do a query for posts that have 'colors' key set to 'blue' (or whatever) or not set at all. The query below will ignore the first condition and return only those that match the second condition.
'meta_query' => array( 'relation' => 'OR', array( 'key' => 'colors', 'compare' => 'NOT EXISTS' // doesn't work ), array( 'key' => 'colors', 'value' => 'blue' ) )
3) However, we can fool WordPress into using the first condition if we set the 'value'. It doesn't need a relevant value (it's ignored, as far as I know), but it needs to be set in order for the
NOT EXISTS
condition to have any effect.'meta_query' => array( 'relation' => 'OR', array( 'key' => 'colors', 'compare' => 'NOT EXISTS', // works! 'value' => '' // This is ignored, but is necessary... ), array( 'key' => 'colors', 'value' => 'blue' ) )
This was true up until WordPress 3.9. If you're still using an older version, this is a viable workaround.
-
ありがとう!そして、遅れてすみません.クエリを使用することになりましたが、次の数時間でソリューションをテストするので、元に戻すことができます.この作業があれば、他の人を助けることができます.確認でき次第お知らせします.再度、感謝しますThanks! And sorry for the delay. I ended up using a query, but I will be testing your solution in the following hours so I can switch back and maybe if this work we can help some other. I will let you know as soon as I can check it. Thanks again
- 0
- 2013-01-17
- JordanBel
-
よく書かれ、空の値を追加すると期待される結果が返されることを確認しました.意図的ではないと思います.trac.wordpress.orgを見て、すでにチケットがあるかどうかを確認する価値があるかもしれません.ない場合は、再現可能です.Well written and confirmed that adding an empty value returns expected results. I'd say it's unintentional, may be worth a look at trac.wordpress.org to see if there's already a ticket, if not, this is reproducible.
- 0
- 2013-03-06
- Taylor Dewey
-
WPをだますための素晴らしい説明と解決策をありがとう:)ここに着くのに少し時間がかかりました-しかし今私は少なくとも10回賛成をクリックしたいと思います(私ができれば;))Thanks for the great explanation and solution to trick WP :) Did take some time to get here - but now I want to click upvote for at least 10 times (if only I could ;))
- 0
- 2013-03-21
- lorem monkey
-
compare EXISTSを使用すると、残念ながら、新しいバージョンのWPでは値が無視されません(4.2.2でテスト済み).If I use compare EXISTS, value is unfortunately not ignored in newer versions of WP (tested in 4.2.2)
- 0
- 2015-07-01
- Igor Jerosimić
-
クエリにも含まれる可能性のある `orderbymeta_key`に注意してください.Wordpressは、メタキーの `WHEREmeta_key=value`もハードコーディングします!Be aware of an `orderby meta_key` that may also be in your query! Wordpress will hardcode `WHERE meta_key = value` for a meta orderby as well!
- 0
- 2016-04-08
- Chizzle
-
値を指定する必要がある「EXISTS」および「NOTEXISTS」「バグ」は、WP3.9で修正されました.The `EXISTS` and `NOT EXISTS` "bug" which required you to specify a value, was fixed in WP 3.9
- 11
- 2016-04-15
- trex005
-
trex005は正しいです: "(注:バグ#23268のため、3.9より前のNOT EXISTS比較が正しく機能するには、値が必要です.valueパラメーターに文字列を指定する必要があります.空の文字列またはNULLは機能しません.ただし、他の文字列はトリックを実行し、NOT EXISTSを使用するとSQLに表示されません.インスピレーションが必要ですか?「バグ#23268」はどうですか?)」trex005 is right: "(Note: Due to bug #23268, value is required for NOT EXISTS comparisons to work correctly prior to 3.9. You must supply some string for the value parameter. An empty string or NULL will NOT work. However, any other string will do the trick and will NOT show up in your SQL when using NOT EXISTS. Need inspiration? How about 'bug #23268'.)"
- 0
- 2017-04-29
- jave.web
-
- 2015-01-09
カスタムクエリを使用すると、これはうまくいきました:
SELECT * FROM wp_posts as posts WHERE posts.post_type = 'post' AND NOT EXISTS ( SELECT * FROM `wp_postmeta` WHERE `wp_postmeta`.`meta_key` = "your_meta_key" AND `wp_postmeta`.`post_id`=posts.ID )
Using a custom query, this worked for me:
SELECT * FROM wp_posts as posts WHERE posts.post_type = 'post' AND NOT EXISTS ( SELECT * FROM `wp_postmeta` WHERE `wp_postmeta`.`meta_key` = "your_meta_key" AND `wp_postmeta`.`post_id`=posts.ID )
-
- 2020-01-09
これは私にとってはうまくいきました.
'meta_query' => array( 'relation' => 'OR', array( 'key' => 'colors', 'compare' => 'NOT EXISTS' // doesn't work ), array( 'key' => 'colors', 'value' => 'blue' ) )
This worked for me.
'meta_query' => array( 'relation' => 'OR', array( 'key' => 'colors', 'compare' => 'NOT EXISTS' // doesn't work ), array( 'key' => 'colors', 'value' => 'blue' ) )
特定の
meta_key
が存在しないすべての投稿を取得して、それを作成するクエリを取得しようとしています.テストしているクエリが機能していないようであるため、これらの投稿を見つけるのに問題があります.
これらの投稿を取得するために使用しているコードは次のとおりです.
キー
colors
の投稿がない場合は何も返されませんが、キーids
の投稿のcolors
が返されます.キーが存在します(私が必要とするものの反対).代わりにEXIST
を試してみましたが、うまくいきませんでした.必要なクエリを作成する正しい方法を誰かに教えてもらえれば、感謝します.
ありがとう!