Consulta anidada dentro del operador lógico O no funciona en meta_query

4

He estado probando esto durante horas y he buscado y no he conseguido ninguna pista. Estoy tratando de hacer una consulta anidada con el operador OR como padre y el operador AND dentro de él como hijo. La página sigue cargando y los resultados no se muestran. Mientras que por otra parte, si hago AND como padre, entonces funciona. Aquí está mi código:

$compare_array = array(
    'relation' => 'OR',
    array(
        'relation' => 'AND',
        array(
            'key'       => 'property_size',
            'value'     => '15',
            'type'      => 'numeric',
            'compare'   => '='
        ),
        array(
            'key'       => 'property-type',
            'value'     => 'marla',
            'type'      => 'CHAR',
            'compare'   => 'LIKE'
        )
    ),
    array(
        'relation' => 'AND',
        array(
            'key'       => 'property_size',
            'value'     => '15',
            'type'      => 'numeric',
            'compare'   => '='
        ),
        array(
            'key'       => 'property-type',
            'value'     => 'Kanal',
            'type'      => 'CHAR',
            'compare'   => 'LIKE'
        )
    )

);

$meta_query[] = $compare_array;
    
pregunta Safi Mustafa 14.03.2016 - 15:08

1 respuesta

2

Por la consulta anterior puedo ver que estás dispuesto a hacer lo siguiente.

Obtén todas las publicaciones si property_size es 15 AND property-type es marla OR Kanal .

El SQL será like %marla% OR like %Kanal% , esto es equivalente a like %marla Kanal% , esto no hará mucha diferencia (supongo)

Para que pueda minimizar esta consulta de esta manera

$compare_array = array(
    'relation' => 'AND',
    array(
        'key'       => 'property_size',
        'value'     => '15',
        'type'      => 'numeric',
        'compare'   => '='
    ),
    array(
        'key'       => 'property-type',
        'value'     => 'marla Kanal',
        'type'      => 'CHAR',
        'compare'   => 'LIKE'
    )
);

En mi prueba, reduce el tiempo de consulta en 428 ms

SQL like es costoso, por lo tanto, si coincide con el valor exacto, entonces use IN con una matriz de valores.

array(
        'key'       => 'property-type',
        'value'     =>  array('marla', 'Kanal'),
        'type'      => 'CHAR',
        'compare'   => 'IN'
    )
    
respondido por el Sumit 14.03.2016 - 17:58

Lea otras preguntas en las etiquetas