¿Cuál es la diferencia entre la RELACIÓN "AND" y "OR" en TAX_QUERY?

31 jul 2013, 15:36:24
Vistas: 23.2K
Votos: 3

Porque si uso:

'relation' => 'AND'

o

'relation' => 'OR'

los resultados son siempre los mismos. ¿Por qué?

0
Todas las respuestas a la pregunta 2
1

tax_query es un array bidimensional, cada sub-array puede considerarse como una consulta de taxonomía, típicamente tiene la forma:

array(
  'taxonomy' => 'people',
  'field' => 'slug',
  'terms' => 'bob'
)

(por ejemplo, publicaciones con el término con slug 'bob', de la taxonomía 'people').

El hecho de que tax_query sea un array bidimensional significa que puedes tener múltiples consultas de taxonomía. En este caso, puedes querer devolver publicaciones que cumplan todas las consultas de taxonomía (relation => 'AND') o publicaciones que cumplan al menos una consulta de taxonomía (relation => 'OR').

Como el codex indica:

Esta construcción te permite consultar múltiples taxonomías utilizando el parámetro relation en el primer array (exterior) para describir la relación booleana entre las consultas de taxonomía.

Por ejemplo:

$args = array(
    'post_type' => 'post',
    'tax_query' => array(
        'relation' => 'AND', //Debe satisfacer todas las consultas de taxonomía
        array(
            'taxonomy' => 'movie_genre',
            'field' => 'slug',
            'terms' => 'action'
        ),
        array(
            'taxonomy' => 'actor',
            'field' => 'id',
            'terms' => array( 103, 115, 206 ),
            'operator' => 'NOT IN'
        )
    )
);
$query = new WP_Query( $args );

devuelve todas las publicaciones con el término movie_genre con slug 'action' Y que no tengan los términos actor con IDs 103, 115, 206.

Por otro lado (observa el cambio en relation):

$args = array(
    'post_type' => 'post',
    'tax_query' => array(
        'relation' => 'OR', //Debe satisfacer al menos una consulta de taxonomía
        array(
            'taxonomy' => 'movie_genre',
            'field' => 'slug',
            'terms' => 'action'
        ),
        array(
            'taxonomy' => 'actor',
            'field' => 'id',
            'terms' => array( 103, 115, 206 ),
            'operator' => 'NOT IN'
        )
    )
);
$query = new WP_Query( $args );

devuelve todas las publicaciones que tengan el término movie_genre con slug 'action' O que no tengan los términos actor con IDs 103, 115, 206 (o que cumplan ambas condiciones).

31 jul 2013 17:58:25
Comentarios

Si cada publicación que coincide con una de las consultas de taxonomía también coincide con todas las demás, no habrá diferencia en las publicaciones devueltas entre establecer relation como OR o AND. Esto es trivialmente cierto en el caso donde solo tienes una consulta de taxonomía.

Stephen Harris Stephen Harris
31 jul 2013 18:02:04
0

Con AND las publicaciones devueltas deben tener ambos términos.

Con OR las publicaciones devueltas solo necesitan tener uno u otro.

Si están devolviendo lo mismo, probablemente todas las publicaciones que estás consultando tengan ambos términos.

31 jul 2013 15:41:23