Interroger tous les messages pour lesquels une clé méta n'existe pas
-
-
Quelle version de WordPress utilisez-vous?What version of WordPress are you using?
- 0
- 2013-01-12
- s_ha_dum
-
Salut,désolépour l'omission.J'utilise la v3.5Hi,sorry for the omission. I am using v3.5
- 0
- 2013-01-12
- JordanBel
-
Il semble que cetype de requête (avec comparer défini sur NOT EXISTS) a été ajouté dans 3.5,donc cela devraitfonctionnertel quel,pour autant queje puisse voir.Ce seraitfacile de lefaire via une requête SELECTpersonnalisée,cependant ...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
-
Merci,je vaisessayer d'utiliser select.Je dois savoir avant quellestablesinterrogeret comment conformer la requête :(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
-
Très étrange.Jene peuxpas déceler unproblème avec ce codeet vous utilisez 3.5+,c'estpourquoij'ai demandé.Avez-vous réellement regardé labase de donnéespour confirmer que vos données sontinsérées comme vous lepensez?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
-
Avez-vousessayé «EXISTS»?Vous avezmentionné «EXIST»maisje crois que comparern'accepte que «EXISTS» avec un «S» à lafin.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
-
Salutmerci.Malheureusement,EXISTSn'apasfonctionnénonplus.Je vaispasser à l'option de requête,je pense.Hi, thanks. Unfortunately EXISTS didn't work either. I will go to the query option I think.
- 0
- 2013-01-14
- JordanBel
-
3 réponses
- votes
-
- 2013-01-16
J'aifait quelquestests supplémentaires avec cela,et honnêtementje nepeuxpastrouver une raisonpour laquelle celane fonctionneraitpas (àmoins que le code ci-dessusne soitjuste unextraitet que le vrai code corresponde àmesexemples ci-dessous). J'ai cependant découvert quelques choses quipourraient vous conduire dans labonne direction.
1) Enelle-même,cetteméta-requêteest l'équivalent de "colors IS NULL",c'est-à-dire qu'elle retournera lesmessages quin'ontpas cette clé définie dans latablepostmeta. C'est le casillustré ci-dessus,et cela aurait dûfonctionner.
'meta_query' => array( array( 'key' => 'colors', 'compare' => 'NOT EXISTS' // this should work... ), )
2) Avant WordPress 3.9,l'établissement de l'index «relation» avec «OU»modifie cette condition. Cela renvoie le contraire. Neme demandezpaspourquoi. Ceciestparticulièrementimportant lorsque vouseffectuezplusieursméta-requêtes. Cela signifie qu'iln'estpaspossible au départ defaire une requêtepour les articles dont la clé «couleurs»est définie sur «bleu» (ou autre) oupas dutout définie. La requête ci-dessousignorera lapremière conditionet ne retournera que celles qui correspondent à la deuxième condition.
'meta_query' => array( 'relation' => 'OR', array( 'key' => 'colors', 'compare' => 'NOT EXISTS' // doesn't work ), array( 'key' => 'colors', 'value' => 'blue' ) )
3) Cependant,nouspouvonstromper WordPressen utilisant lapremière condition sinous définissons la «valeur». Iln'apasbesoin d'une valeurpertinente (elleestignorée,pour autant queje sache),maiselle doit être définie pour que la condition
NOT EXISTS
ait uneffet .'meta_query' => array( 'relation' => 'OR', array( 'key' => 'colors', 'compare' => 'NOT EXISTS', // works! 'value' => '' // This is ignored, but is necessary... ), array( 'key' => 'colors', 'value' => 'blue' ) )
C'était vraijusqu'à WordPress 3.9. Si vous utiliseztoujours une versionplus ancienne,c'est une solution de contournement viable.
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.
-
Merci!Et désolépour le retard.J'aifini par utiliser une requête,maisje vaistester votre solution dans les heures qui suivent afin queje puisse reveniren arrièreet peut-être que si celafonctionne,nouspouvons aider un autre.Je vousferai savoir dès queje pourrai le vérifier.MerciencoreThanks! 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
-
Bien écritet confirmé que l'ajout d'une valeur vide renvoie les résultats attendus.Je dirais que cen'estpasintentionnel,cela vautpeut-être lapeine de regardertrac.wordpress.orgpour voir s'il y a déjà unticket,sinon,c'est reproductible.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
-
Mercipour l'excellenteexplicationet solutionpourtromper WP :) J'aipris dutempspour arriverici -maismaintenantje veux cliquer sur le votepour aumoins 10fois (si seulementje pouvais;))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
-
Sij'utilise compare EXISTS,la valeurn'estmalheureusementpasignorée dans les versionsplus récentes de WP (testéen 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ć
-
Soyez conscient d'un `orderbymeta_key` quipeut également être dans votre requête!Wordpress coderaen dur `WHEREmeta_key=value`pour uneméta commande également!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
-
Le "bogue" `EXISTS`et` NOT EXISTS` qui vous obligeait à spécifier une valeur,a été corrigé dans WP 3.9The `EXISTS` and `NOT EXISTS` "bug" which required you to specify a value, was fixed in WP 3.9
- 11
- 2016-04-15
- trex005
-
trex005 a raison: "(Remarque:en raison dubogue # 23268,une valeurest requisepour que les comparaisons NOT EXISTSfonctionnent correctement avant la version 3.9. Vous devezfournir une chaînepour leparamètre value. Une chaîne vide ou NULLne fonctionnera PAS. Cependant,toutune autre chaînefera l'affaireet n'apparaîtra PAS dans votre SQL lorsque vous utilisez NOT EXISTS. Besoin d'inspiration? Que diriez-vous du 'bug # 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
À l'aide d'une requêtepersonnalisée,cela afonctionnépourmoi:
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
Cela afonctionnépourmoi.
'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' ) )
J'essaie d'obtenir une requêtepour récupérertous lesmessages où une
meta_key
spécifiquen'existepas,puisje la crée.Je rencontre desproblèmespourtrouver cesmessages car la requête queje testene semblepasfonctionner.
Voici le code quej'utilisepouressayer d'obtenir cesmessages:
Celane renvoie rien s'iln'y apas demessages avec les
colors
clés,mais renvoie lesids
desmessages avec lescolors
à chaquefois que la cléestprésente (le contraire de ce dontj'aibesoin). J'aiessayé avecEXIST
à laplacemaispas de chance.Si quelqu'unpeutme donner des conseils sur lamanière correcte de créer une requête comme celle dontj'aibesoin,je l'apprécierai.
Merci!