对于在元字段中保存多选值的最佳实践,我有点困惑。
假设
<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。
最合适的回答,由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中将其存储为单个值,则
serialize
d. 阵列
array("animal" => "cat");
序列化时的外观如下
a:1:{s:6:"animal";s:3:"cat";}
. 您的实际
$_POST[\'_casestudypost\']
值将进行类似的转换。这远远不是你所需要的。
如果要按值或键/值对进行提取,请存储每个选定的$_POST[\'_casestudypost\']
数据库中的各个值—每个值都有自己的行,而不是作为一个包含序列化数组的键/值对。
如果不必按值搜索,则保存序列化数组。
您的问题没有足够的上下文,我无法告诉您是否真的需要按值进行搜索。也许有一些方法可以得到你想要的结果,但你没有想到。