Title: WP_QUERY with multiple nested array within meta_query
Last modified: August 14, 2017

---

# WP_QUERY with multiple nested array within meta_query

 *  Resolved [unicco](https://wordpress.org/support/users/unicco/)
 * (@unicco)
 * [8 years, 10 months ago](https://wordpress.org/support/topic/wp_query-with-multiple-meta_query/)
 * WP_QUERY is returning an 504 Gateway Time-out error. I can’t figure out what 
   I’m doing wrong. I want to retrieve all items which have either a price between
   1 and 3000 OR 3001 and 6000. The upper “relation” => OR (within meta_query) is
   causing wordpress to return 504.
 * Could someone please help me out, and tell me what I’m doing wrong?
 * I’ve constructed my query using [https://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters](https://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters)
 *     ```
       Array
       (
           [post_type] => Array
               (
                   [0] => product
               )
   
           [posts_per_page] => 30
           [offset] => 0
           [order] => DESC
           [orderby] => date
           [post_status] => publish
           [ignore_sticky_posts] => 1
           [paged] => 1
           [tax_query] => Array
               (
                   [relation] => AND
                   [0] => Array
                       (
                           [taxonomy] => product_cat
                           [field] => slug
                           [terms] => Array
                               (
                                   [0] => moebler
                               )
   
                           [operator] => IN
                       )
   
               )
   
           [meta_query] => Array
               (
                   [relation] => OR <----- THIS BUGS
                   [0] => Array
                       (
                           [relation] => AND
                           [0] => Array
                               (
                                   [key] => _price
                                   [value] => 1
                                   [compare] => >=
                                   [type] => DECIMAL
                               )
   
                           [1] => Array
                               (
                                   [key] => _price
                                   [value] => 3000
                                   [compare] => <=
                                   [type] => DECIMAL
                               )
   
                       )
   
                   [1] => Array
                       (
                           [relation] => AND
                           [0] => Array
                               (
                                   [key] => _price
                                   [value] => 3001
                                   [compare] => >=
                                   [type] => DECIMAL
                               )
   
                           [1] => Array
                               (
                                   [key] => _price
                                   [value] => 6000
                                   [compare] => <=
                                   [type] => DECIMAL
                               )
   
                       )
   
               )
   
       )
       ```
   
    -  This topic was modified 8 years, 10 months ago by [unicco](https://wordpress.org/support/users/unicco/).
    -  This topic was modified 8 years, 10 months ago by [unicco](https://wordpress.org/support/users/unicco/).

Viewing 13 replies - 1 through 13 (of 13 total)

 *  [Jonathan Bossenger](https://wordpress.org/support/users/psykro/)
 * (@psykro)
 * [8 years, 9 months ago](https://wordpress.org/support/topic/wp_query-with-multiple-meta_query/#post-9409399)
 * [@unicco](https://wordpress.org/support/users/unicco/) I don’t think you can 
   use ‘=> >=’ for compare the way you are doing.
 * Have you set WP_DEBUG to true, this might show some PHP errors you are missing.
 * It might also be easier if you past your original PHP code here.
 *  Thread Starter [unicco](https://wordpress.org/support/users/unicco/)
 * (@unicco)
 * [8 years, 9 months ago](https://wordpress.org/support/topic/wp_query-with-multiple-meta_query/#post-9409504)
 * Actually I’m building the query using Ajax, and printing the query args using
   var_dump returns an error. So I hooked on a filter, an echo to wp_debug_log instead.
 * The docs states: “Possible values are ‘=’, ‘!=’, ‘>’, ‘>=’, ‘<‘, ‘<=’, ‘LIKE’,‘
   NOT LIKE’, ‘IN’, ‘NOT IN’, ‘BETWEEN’, ‘NOT BETWEEN’, ‘NOT EXISTS’, ‘REGEXP’, ‘
   NOT REGEXP’ or ‘RLIKE’. Default value is ‘=’.”, so it should be possible. I could
   try BETWEEN instead, but I don’t think it would work.
 *  [Jonathan Bossenger](https://wordpress.org/support/users/psykro/)
 * (@psykro)
 * [8 years, 9 months ago](https://wordpress.org/support/topic/wp_query-with-multiple-meta_query/#post-9409567)
 * Oh, sorry I read that wrong, the combination of the array notation ( => ) and
   the comparison operators threw me.
 * Are the meta keys for price definitely ‘_price’ ?
 *  Thread Starter [unicco](https://wordpress.org/support/users/unicco/)
 * (@unicco)
 * [8 years, 9 months ago](https://wordpress.org/support/topic/wp_query-with-multiple-meta_query/#post-9409607)
 * Yes I’m pretty sure about that. If I only have one nested meta query, it works
   perfectly. That’s why I know, that the inner atts are correct. If I change the
   outer `relation` to AND this works too, but I want to use OR. Saying either the
   price is between array 1 or its between array 2. I’m just wondering why this 
   is bugging.
    -  This reply was modified 8 years, 9 months ago by [unicco](https://wordpress.org/support/users/unicco/).
 *  Thread Starter [unicco](https://wordpress.org/support/users/unicco/)
 * (@unicco)
 * [8 years, 9 months ago](https://wordpress.org/support/topic/wp_query-with-multiple-meta_query/#post-9409638)
 * And a timeout error seems pretty weird aswell… If I put weird/wrong things in
   my query, I’m use to just getting an empty resultset back. But an timeout error
   confuses me..
 *  [Jonathan Bossenger](https://wordpress.org/support/users/psykro/)
 * (@psykro)
 * [8 years, 9 months ago](https://wordpress.org/support/topic/wp_query-with-multiple-meta_query/#post-9410383)
 * Can you echo the query that is being run?
 * $query = new WP_Query( $args );
    echo $query->request;
 * If you run that query directly on the database it might show the errors
 *  Thread Starter [unicco](https://wordpress.org/support/users/unicco/)
 * (@unicco)
 * [8 years, 9 months ago](https://wordpress.org/support/topic/wp_query-with-multiple-meta_query/#post-9410436)
 * No, because `new WP_Query( $args );` returns 504, so I won’t be able to retrieve
   that prop on that object.
    -  This reply was modified 8 years, 9 months ago by [unicco](https://wordpress.org/support/users/unicco/).
 *  Thread Starter [unicco](https://wordpress.org/support/users/unicco/)
 * (@unicco)
 * [8 years, 9 months ago](https://wordpress.org/support/topic/wp_query-with-multiple-meta_query/#post-9410453)
 * Actually I tried to build up my meta_query directly in php. This results in a
   timeout error aswell. Is this a bug in WP, or what the heck?
 *     ```
       $args[ 'meta_query' ] = array(
       	'relation' => 'OR',
       	array(
       		'relation' => 'AND',
       		array(
       			'key' => '_price',
       			'value' => '1',
       			'compare' => '>=',
       			'type' => 'DECIMAL',
       		),
       		array(
       			'key' => '_price',
       			'value' => '3000',
       			'compare' => '<=',
       			'type' => 'DECIMAL',
       		),
       	),
       	array(
       		'relation' => 'AND',
       		array(
       			'key' => '_price',
       			'value' => '3001',
       			'compare' => '>=',
       			'type' => 'DECIMAL',
       		),
       		array(
       			'key' => '_price',
       			'value' => '6000',
       			'compare' => '<=',
       			'type' => 'DECIMAL',
       		),
       	),
       );
       ```
   
 * From error_log (the wp query arg):
 *     ```
       [15-Aug-2017 07:33:16 UTC] Array
       (
           [post_type] => Array
               (
                   [0] => product
               )
   
           [posts_per_page] => 30
           [offset] => 0
           [order] => DESC
           [orderby] => date
           [post_status] => publish
           [ignore_sticky_posts] => 1
           [paged] => 1
           [tax_query] => Array
               (
                   [relation] => AND
                   [0] => 
                   [1] => Array
                       (
                           [taxonomy] => product_cat
                           [field] => slug
                           [terms] => Array
                               (
                                   [0] => moebler
                               )
   
                           [operator] => IN
                       )
   
               )
   
           [meta_query] => Array
               (
                   [relation] => OR
                   [0] => Array
                       (
                           [relation] => AND
                           [0] => Array
                               (
                                   [key] => _price
                                   [value] => 1
                                   [compare] => >=
                                   [type] => DECIMAL
                               )
   
                           [1] => Array
                               (
                                   [key] => _price
                                   [value] => 3000
                                   [compare] => <=
                                   [type] => DECIMAL
                               )
   
                       )
   
                   [1] => Array
                       (
                           [relation] => AND
                           [0] => Array
                               (
                                   [key] => _price
                                   [value] => 3001
                                   [compare] => >=
                                   [type] => DECIMAL
                               )
   
                           [1] => Array
                               (
                                   [key] => _price
                                   [value] => 6000
                                   [compare] => <=
                                   [type] => DECIMAL
                               )
   
                       )
   
               )
   
       )
       ```
   
    -  This reply was modified 8 years, 9 months ago by [unicco](https://wordpress.org/support/users/unicco/).
 *  Thread Starter [unicco](https://wordpress.org/support/users/unicco/)
 * (@unicco)
 * [8 years, 9 months ago](https://wordpress.org/support/topic/wp_query-with-multiple-meta_query/#post-9410622)
 * Alright. I’ve an solution for this. Seems like this should be reported as a bug
   in WP. I believe the above way to have nested meta-queries are 1:1 with how the
   docs state it. However, it kept returning an 504 error. I’m not quite sure why,
   but it seems like WP_QUERY dosen’t translate the arg-query-array correctly.
 * Instead I used BETWEEN, without using any nested meta_queries, and this works
   perfectly.
 *     ```
       $args[ 'meta_query' ] = array(
       	'relation' => 'OR',
       	array(
       		'key' => '_price',
       		'value' => array( 1, 3000 ),
       		'compare' => 'BETWEEN',
       		'type' => 'DECIMAL',
       	),
       	array(
       		'key' => '_price',
       		'value' => array( 3001, 6000 ),
       		'compare' => 'BETWEEN',
       		'type' => 'DECIMAL',
       	),
       );
       ```
   
 * [https://prnt.sc/g8nuo8](https://prnt.sc/g8nuo8)
    -  This reply was modified 8 years, 9 months ago by [unicco](https://wordpress.org/support/users/unicco/).
 *  [Jonathan Bossenger](https://wordpress.org/support/users/psykro/)
 * (@psykro)
 * [8 years, 9 months ago](https://wordpress.org/support/topic/wp_query-with-multiple-meta_query/#post-9410774)
 * I’m not sure if its a bug or just the fact that you can’t nest meta queries in
   that way, however if you are searching for results between 2 values, the use 
   of the BETWEEN keyword is recommended. Glad you were able to sort it out.
 * Please mark this topic as resolved.
    -  This reply was modified 8 years, 9 months ago by [Jonathan Bossenger](https://wordpress.org/support/users/psykro/).
 *  Thread Starter [unicco](https://wordpress.org/support/users/unicco/)
 * (@unicco)
 * [8 years, 9 months ago](https://wordpress.org/support/topic/wp_query-with-multiple-meta_query/#post-9410844)
 * Well if you have that opinion, I’d prefer getting an explanation, why that is
   so. As far as I can see, the docs outlines, that it’s possible to have nested
   meta queries, but when using it, it breaks the site. Actually I had a deadlock
   in the database, and couldn’t access neither front nor backend. I had to restart
   mysql service before I could access. If you don’t categorize that as a bug, what
   is it?
 *  [Jonathan Bossenger](https://wordpress.org/support/users/psykro/)
 * (@psykro)
 * [8 years, 9 months ago](https://wordpress.org/support/topic/wp_query-with-multiple-meta_query/#post-9410992)
 * [@unicco](https://wordpress.org/support/users/unicco/) my apologies, I’ve just
   setup a test using the structure you have provided
 * This is my meta_query
 *     ```
       'meta_query'  => array(
       	'relation' => 'OR',
       	array(
       		'relation' => 'AND',
       		array(
       			'key'     => '_price',
       			'value'   => 1,
       			'compare' => '>=',
       			'type' => 'DECIMAL',
       		),
       		array(
       			'key'     => '_price',
       			'value' <= 3000,
       			'compare' => '<=',
       			'type' => 'DECIMAL',
       		),
       	),
       	array(
       		'relation' => 'AND',
       		array(
       			'key'     => '_price',
       			'value'   => 3001,
       			'compare' => '>=',
       			'type' => 'DECIMAL',
       		),
       		array(
       			'key'     => '_price',
       			'value' <= 6000,
       			'compare' => '<=',
       			'type' => 'DECIMAL',
       		),
       	)
       ),
       ```
   
 * And it works returns data on my test bed. So you are correct in that it should
   be possible and it should work and does in my test.
 * Therefore I can only assume there is something else amiss with the query itself
   or that something is causing hassles elsewhere.
 * Apologies for making my earlier assumption, but I find it hard to debug a problem
   without seeing the original PHP code, hence I had to code it up for myself 😉
 *  [Jonathan Bossenger](https://wordpress.org/support/users/psykro/)
 * (@psykro)
 * [8 years, 9 months ago](https://wordpress.org/support/topic/wp_query-with-multiple-meta_query/#post-9411002)
 * [@unicco](https://wordpress.org/support/users/unicco/) I am making guesses here,
   but it could be because you are casting the type as DECIMAL but passing a string
   for the value?

Viewing 13 replies - 1 through 13 (of 13 total)

The topic ‘WP_QUERY with multiple nested array within meta_query’ is closed to new
replies.

## Tags

 * [database](https://wordpress.org/support/topic-tag/database/)
 * [query](https://wordpress.org/support/topic-tag/query/)

 * In: [Fixing WordPress](https://wordpress.org/support/forum/how-to-and-troubleshooting/)
 * 13 replies
 * 2 participants
 * Last reply from: [Jonathan Bossenger](https://wordpress.org/support/users/psykro/)
 * Last activity: [8 years, 9 months ago](https://wordpress.org/support/topic/wp_query-with-multiple-meta_query/#post-9411002)
 * Status: resolved

## Topics

### Topics with no replies

### Non-support topics

### Resolved topics

### Unresolved topics

### All topics
