使用\'relation\' => \'OR\'
as in the Codex example 以下内容:
$args = array(
\'post_type\' => \'product\',
\'meta_query\' => array(
\'relation\' => \'OR\', /* <-- here */
array(
\'key\' => \'color\',
\'value\' => \'blue\',
\'compare\' => \'NOT LIKE\'
),
array(
\'key\' => \'price\',
\'value\' => array( 20, 100 ),
\'type\' => \'numeric\',
\'compare\' => \'BETWEEN\'
)
)
);
$query = new WP_Query( $args );
那会给你一个
OR
跨越所有meta\\u查询块。如果你需要的是
WHERE "instructor" = 1128 AND (class_1_days = "value1" OR class_1_days = "value2")
如果您的数据没有序列化,那么像这样的操作就可以了。
$args = array(
\'taxonomy\' => \'courses\',
\'term\' => \'drawing\',
\'post_type\' => \'school\',
\'paged\' => $paged,
\'meta_query\' =>
array(
array(
\'key\' => \'instructor\',
\'value\' => \'1128\',
\'compare\' => \'LIKE\',
),
array(
\'key\' => \'class_1_days\',
\'value\' => array(\'Friday\',\'Saturday\')
\'compare\' => \'IN\',
)
)
);
考虑到您已经序列化了数据,这将很困难。您可以为
posts_where
但我希望结果是低效的,而且容易出错。
根据我的经验,对于这种需要搜索/过滤/排序某些信息的情况,正确的方法是首先不要将数据存储为序列化数组。如果您需要这样的查询,那么这就是错误的方法。
如果我接管这个项目,我会以这种方式循环查询需要查询的数据,并将每个数据重新保存在一个键/值对中。您没有查询的部分可以保持序列化。在MySQL中,无论是作为您正在尝试的查询的一部分,还是作为一些独立查询,都没有(好的)方法可以做到这一点。我见过创建MySQL“unserialize”函数的尝试,但我看不出有什么意义。重新保存数据是一种方法。
它应该是一个相当简单的查询,以获取class_1_days
数据然后循环遍历它,将需要查询的部分保存为独立键,将其余部分作为序列化数据放回。