Interroga tutti i post in cui non esiste una meta chiave
-
-
Quale versione di WordPress stai utilizzando?What version of WordPress are you using?
- 0
- 2013-01-12
- s_ha_dum
-
Ciao,scusaper l'omissione.Sto usando la v3.5Hi,sorry for the omission. I am using v3.5
- 0
- 2013-01-12
- JordanBel
-
Sembra che queltipo di query (conil confrontoimpostato su NOT EXISTS) sia stato aggiuntonella 3.5,quindi dovrebbefunzionare così com'è,per quantoposso vedere.Sarebbefacilefarlotramite query SELECTpersonalizzata,però ...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
-
Grazieproverò a usare select.Devoimparareprima qualitabelleinterrogaree come conformare la queryperò :(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
-
Molto strano.Non riesco aindividuare unproblema con quel codicee stai usando 3.5+,motivoper cui l'ho chiesto.Haieffettivamenteesaminatoil databaseper confermare chei tuoi dati vengonoinseritinelmodoin cuipensi che siano?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
-
Haiprovato "EXISTS"?Haimenzionato "EXIST"ma credo cheil confronto accetti solo "EXISTS" con una "S" allafine.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
-
Ciaograzie.Purtropponeanche EXISTS hafunzionato.Vado all'opzione di query chepenso.Hi, thanks. Unfortunately EXISTS didn't work either. I will go to the query option I think.
- 0
- 2013-01-14
- JordanBel
-
3 risposta
- voti
-
- 2013-01-16
Hofatto altritest con questo,e onestamentenon riesco atrovare una ragioneper cuinon avrebbefunzionato (ameno cheil codice sopranon sia solo uno snippete il codice reale si adatti aimiei esempi sotto). Tuttavia,ho scoperto unpaio di cose chepotrebbero condurtinellagiusta direzione.
1) Diper sé,questameta query è l'equivalente di "colors IS NULL",cioè restituirài post chenon hanno quella chiaveimpostatanellatabellapostmeta. Questo èil casomostrato soprae avrebbe dovutofunzionare.
'meta_query' => array( array( 'key' => 'colors', 'compare' => 'NOT EXISTS' // this should work... ), )
2) Prima di WordPress 3.9,stabilire l'indice di "relazione" con "OR" cambia questa condizione. Restituisce l'opposto. Non chiedermiperché. Ciò èparticolarmenteimportante quando sieseguonopiùmeta query. Ciò significa cheinizialmentenon èpossibileeseguire una queryperi post con la chiave "colori"impostata su "blu" (o qualsiasi altra cosa) ononimpostata affatto. La query seguenteignorerà laprima condizionee restituirà solo quelle che corrispondono alla seconda condizione.
'meta_query' => array( 'relation' => 'OR', array( 'key' => 'colors', 'compare' => 'NOT EXISTS' // doesn't work ), array( 'key' => 'colors', 'value' => 'blue' ) )
3) Tuttavia,possiamoingannare WordPressfacendogli usare laprima condizione seimpostiamoil "valore". Non habisogno di un valore rilevante (èignorato,per quantone so),ma deveessereimpostato affinché la condizione
NOT EXISTS
abbiaeffetto .'meta_query' => array( 'relation' => 'OR', array( 'key' => 'colors', 'compare' => 'NOT EXISTS', // works! 'value' => '' // This is ignored, but is necessary... ), array( 'key' => 'colors', 'value' => 'blue' ) )
Questoera verofino a WordPress 3.9. Se stai ancora utilizzando una versioneprecedente,questa è una soluzione alternativa.
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.
-
Grazie!E scusaperil ritardo.Hofinitoper usare una query,matesterò latua soluzionenelle ore seguentiin modo dapotertornareindietroe forse se questofunzionapossiamo aiutarne qualcun altro.Tifarò saperenon appenaposso controllarlo.Grazie ancoraThanks! 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
-
Ben scrittoe confermato che l'aggiunta di un valore vuoto restituiscei risultati attesi.Direi chenon èintenzionale,potrebbe valere lapena dare un'occhiata atrac.wordpress.orgper vedere se c'ègià unticket,in caso contrario,questo è riproducibile.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
-
Grazieper l'ottima spiegazionee soluzioneperingannare WP :) Ci è voluto deltempoper arrivare qui,ma ora vogliofare clic su upvoteper almeno 10 volte (se solopotessi;))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
-
Se uso compare EXISTS,il valorepurtropponon vieneignoratonelle versionipiù recenti di WP (testatoin 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ć
-
Sii consapevole di un `orderbymeta_key` chepotrebbe ancheesserenellatua query!Wordpress codificherà anche `WHEREmeta_key=value`per unmeta orderby!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
-
Ilbug "EXISTS`e" NOT EXISTS` "che richiedeva di specificare un valore,è stato correttoin 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 ha ragione: "(Nota: a causa delbug # 23268,il valore è richiesto affinchéi confronti NOT EXISTSfunzionino correttamenteprima della 3.9. Devifornire una stringaperilparametro value. Una stringa vuota o NULL NONfunzionerà. Tuttavia,qualsiasil'altra stringafaràiltruccoe NON appariràneltuo SQL quando usi NOT EXISTS. Haibisogno diispirazione? Chene dici di '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
Utilizzando una querypersonalizzata,questo hafunzionatoperme:
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
Questo hafunzionatoperme.
'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' ) )
Sto cercando di ottenere una queryper recuperaretuttii postin cui una specifica
meta_key
nonesistee quindi crearla.Hoproblemi atrovare questipostpoiché la query che stotestandonon sembrafunzionare.
Eccoil codice che sto usandoper cercare di ottenere queipost:
Non restituiscenulla senon ci sonopost con la chiave
colors
,ma restituiscegliids
deipost con la chiavecolors
ogni volta che ciò la chiave èpresente (l'opposto di ciò di cui hobisogno). Hoprovato conEXIST
invecema senzafortuna.Se qualcunopuò suggerirmiilmodo corretto di creare una query come quella di cui hobisogno,lo apprezzerò.
Grazie!