在序列化数组中搜索既困难又低效,即速度慢。以下纯SQL将完成此操作:
SELECT *
FROM `wp_postmeta`
WHERE `meta_key` LIKE \'daysonair\'
AND `meta_value` LIKE \'%thursday%\'
LIMIT 0 , 100
像这样的东西应该
WP_Query
做类似的事情:
$args = array(
\'post_type\' => \'post\',
\'meta_query\' => array(
array(
\'key\' => \'daysonair\',
\'value\' => \'thursday\',
\'compare\' => \'LIKE\',
)
)
);
$q = new WP_Query($args);
var_dump($q);
但是
LIKE
使用通配符的查询--
%
-- 速度非常慢。查询必须检查表中的每一行是否匹配。
此外,这很容易出错,因为任何“星期四”的出现都会匹配,例如附件图像中的某个内容alt
文本
问题是序列化字符串是PHP构造。MySQL除了像对待任何其他字符串一样对待它之外,不知道如何处理它。
唯一真正好的修复方法,我不知道在您的情况下是否可能,是更改数据在数据库中的存储方式。如果需要搜索数据,则不应将其存储为序列化字符串。每段数据应存储为一个独立的键/值对。