具有多个逻辑的元查询(与/或)

时间:2016-11-15 作者:mistertaylor

我知道以前有人问过这个问题,但这个功能似乎是在v4中添加的。1和被接受的答案没有帮助(它们是4.1之前的)。

如何将元查询与and和ORs“链接”?我找到了这个Update on Query improvements in 4.1 但我似乎无法获得适用于我的应用程序的正确语法。

我想在哪里查询帖子flagged 不是1 AND (expiry_date 是在未来OR 空白)

我尝试过对数组和“关系”重新排序,但没有效果(数据库中肯定有与此查询匹配的帖子)。

查询的日期部分工作正常,但添加flagged 查询不返回帖子。

\'meta_query\'    => array(
    \'relation\' => \'AND\',
    array( 
        \'key\'     => \'flagged\',
        \'value\'   => \'1\',
        \'compare\' => \'!=\'
    ),
    array(
        \'relation\' => \'OR\',
        array(
            \'key\'       => \'expiry_date\',
            \'value\'     => date(\'Y-m-d\',strtotime("today")),
            \'compare\'   => \'>=\',
            \'type\'      => \'DATETIME\',
        ),
        array( //has no date
            \'key\'       => \'expiry_date\',
            \'value\'     => \'\',
            \'compare\'   => \'=\'
        )
    )
)

1 个回复
最合适的回答,由SO网友:mistertaylor 整理而成

执行AND或的正确语法如下:

\'meta_query\'    => array(
    \'relation\' => \'AND\',
    array( 
        \'key\'     => \'flagged\',
        \'value\'   => \'1\',
        \'compare\' => \'!=\'
    ),
    array(
        \'relation\' => \'OR\',
        array(
            \'key\'       => \'expiry_date\',
            \'value\'     => date(\'Y-m-d\',strtotime("today")),
            \'compare\'   => \'>=\',
            \'type\'      => \'DATETIME\',
        ),
        array( //has no date
            \'key\'       => \'expiry_date\',
            \'value\'     => \'\',
            \'compare\'   => \'=\'
        )
    )
)
作为旁注,似乎设置为NULL (例如flagged) 此查询不会返回。设置为任何其他值(例如0) 解决此问题。

相关推荐