我遇到的问题是,当我允许用户过滤帖子时,它会压倒数据库,而且运行速度非常慢。我不确定使用元数据查询帖子的最佳方式是什么。我的网站有一个表单,用户可以根据包含元值的复选框提交以过滤帖子。我目前有一个网站在为单个post\\u元键选择的复选框中创建一个数组,如下所示:
for ($i=0; $i< count($amenities); $i++)//where $amenities is an array of selected checkbox values
{ //$arrays is the array that stores the arrays of checkboxes for different meta keys
$count = count($arrays);
$arrays[$count] = array(
\'key\' => \'amenities\',
\'value\' => $amenities[$i],
\'compare\' => \'LIKE\'
);
}
然后,我使用一个数组来查询数据库,其中包含为每个meta\\u键选择的值。像这样:
$the_query = new WP_Query(array(
\'post_type\' => \'listing\',
\'post_status\' => \'publish\',
\'category_name\' => \'private_rental\',
\'orderby\' => \'rand\',
\'meta_query\' => $arrays
));
当我这样做的时候,我得到了我想要的结果,但结果显示在屏幕上可能需要一分钟。有没有更有效的方法?
任何帮助都将不胜感激!
SO网友:Manny Fleurmond
通过使用元查询,可以减轻服务器的负载IN
:
$the_query = new WP_Query(array(
\'post_type\' => \'listing\',
\'post_status\' => \'publish\',
\'category_name\' => \'private_rental\',
\'orderby\' => \'rand\',
\'meta_query\' => array(
\'key\' => \'amenities\',
\'value\' => $amenities,
\'compare\' => \'IN\'
);
));
您尝试执行的查询看起来很复杂,这可能导致服务器负载过大。
IN
基本上会查找所有包含关键字元数据的帖子
amenities
在用户要查找的字段中具有值的。绝对是一个更有效的查询,imho