Cela fait des heures que j'essaye, j'ai cherché et je n'ai pas la moindre idée. J'essaie de créer une requête imbriquée avec l'opérateur OR
comme parent et l'opérateur AND
à l'intérieur comme enfant. La page continue à se charger et les résultats ne sont pas affichés. Par contre, si je fais AND
en tant que parent, alors cela fonctionne. Voici mon code:
$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;
Je peux voir de la requête ci-dessus que vous êtes prêt à faire la chose suivante.
Obtenez tous les messages si property_size
est 15
ET property-type
est marla
OR Kanal
.
Le SQL sera like %marla% OR like %Kanal%
cela équivaut à like %marla Kanal%
cela ne fera pas beaucoup de différence (je suppose)
Ainsi, vous pouvez réduire cette requête de cette façon
$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'
)
);
Dans mes tests, il réduit le temps de requête de 428 ms
SQL like
est coûteux, donc si vous faites correspondre la valeur exacte, utilisez IN
avec un tableau de valeurs.
array(
'key' => 'property-type',
'value' => array('marla', 'Kanal'),
'type' => 'CHAR',
'compare' => 'IN'
)