元查询中以数组形式存储的多个值

时间:2013-01-21 作者:Squiggs.

对于在元字段中保存多选值的最佳实践,我有点困惑。

假设

<select multiple name="_casestudypost[]">
是我的表单字段

如果我将$\\u POST[\'\\u casestudypost\']存储在同名的meta\\u键中?(返回一个数组)-我如何知道281何时在该数组中。我尝试过:

$args = array(
            \'meta_query\'=> array(
                array(
                    \'key\'=>\'_casestudypost\',
                    \'value\'=>  281,
                    \'compare\' => \'IN\',
                    \'type\' => \'NUMERIC\'
                )
            ),
            \'post_type\'=>\'case_studies\',
            \'post_status\' => \'publish\'
        );
然而,Wordpress在引擎盖下生成的SQL似乎在问,281中是meta\\u值(13281,45),而不是meta\\u值(13281,45)中是281。

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

IN 查询不是字符串比较查询。更像是一群OR 声明。

... WHERE tablename.animal IN (\'cat\',\'dog\',\'ferret\')
将与

...WHERE tablename.animal = \'cat\'
      OR tablename.animal = \'dog\'
      OR tablename.animal = \'ferret\'
$_POST[\'_casestudypost\'] 将是一个数组,如果在Posteta中将其存储为单个值,则serialized. 阵列array("animal" => "cat"); 序列化时的外观如下a:1:{s:6:"animal";s:3:"cat";}. 您的实际$_POST[\'_casestudypost\'] 值将进行类似的转换。这远远不是你所需要的。

如果要按值或键/值对进行提取,请存储每个选定的$_POST[\'_casestudypost\'] 数据库中的各个值—每个值都有自己的行,而不是作为一个包含序列化数组的键/值对。

如果不必按值搜索,则保存序列化数组。

您的问题没有足够的上下文,我无法告诉您是否真的需要按值进行搜索。也许有一些方法可以得到你想要的结果,但你没有想到。

SO网友:Dan

默认值compare a中的值meta_query=, 这就是你想要的。假设我正确理解了你的问题,下面是你想要的。

$args = array(
            \'meta_query\'=> array(
                array(
                    \'key\'=>\'_casestudypost\',
                    \'value\'=>  281,
                    \'type\' => \'NUMERIC\'
                )
            ),
            \'post_type\'=>\'case_studies\',
            \'post_status\' => \'publish\'
        );
compare (string) - Operator to test the \'meta_value\'. Possible values are \'!=\', \'>\', \'>=\', \'<\', or \'<=\'. Default value is \'=\'. (paraphrased to address meta_query)

结束

相关推荐