逻辑运算符OR中的嵌套查询不在META_QUERY中工作

时间:2016-03-14 作者:Safi Mustafa

我已经试了几个小时了,我已经搜索过了,但没有任何线索。我正在尝试使用OR 操作员作为父级和AND 操作员作为孩子在其中。页面一直在加载,结果不会显示。而另一方面,如果我AND 作为家长,它就会起作用。这是我的代码:

$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;

1 个回复
SO网友:Sumit

我可以从上面的查询中看出,您愿意做以下事情。

获取所有帖子,如果property_size15property-typemarlaKanal.

SQL将是like %marla% OR like %Kanal% 这相当于like %marla Kanal% 这不会有多大区别(我想)

因此,您可以通过这种方式最小化此查询

$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\'
    )
);
在我的测试中,它将查询时间减少了428 ms

SQLlike 非常昂贵,因此如果您要匹配精确值,请使用IN 使用值数组。

array(
        \'key\'       => \'property-type\',
        \'value\'     =>  array(\'marla\', \'Kanal\'),
        \'type\'      => \'CHAR\',
        \'compare\'   => \'IN\'
    )