我有搜索过滤器。每个过滤器/属性都有我需要显示的自己的值。
<?php foreach(getAdditionalFilters() as $attributeName => $filterData): ?>
<ul>
<?php showLiCheckBoxes($attributeName); ?>
</ul>
<?php endforeach; ?>
有两种显示过滤器的方法:
1.
function showLiCheckBoxes($attribute,$checked=null){
$CI = get_instance();
$CI->load->model('helper_model');
$allAttrOptions = $CI->helper_model->getAttrOptions($attribute);
foreach($allAttrOptions as $key => $option){
//print html of inputs like <li><input type='checkox' value='{$option['optionId']}...
};
}
function getAttrOptions($attrCode){
$sql = "SELECT option_id as optionId, label FROM eav_attribute_option
INNER JOIN eav_attribute USING(attr_id)
WHERE code='$attrCode'";
$query = $this->db->prepare($sql);
$query->execute();
$query->setFetchMode(PDO::FETCH_ASSOC);
return $query->fetchAll();
}
2.
function showLiCheckBoxes($attribute,$checked=null){
foreach(Attributes::${$attribute} as $key => $value){
//print html of inputs like <li><input type='checkox' value='{$option['optionId']}...
};
}
class Attributes
{
public static $education = array(0 => 'No answer',
1 => 'High school',
2 => 'Some college',
3 => 'In college',
4 => 'College graduate',
5 => 'Grad / professional school',
6 => 'Post grad');
public static $...
因此,在第一种方式中,属性选项存储在数据库中,正如您所见,每个属性都会进行额外的查询。在第二种方式中,属性选项存储在数组中。
我不是在问哪种方式是正确的,因为这里没有写其他一些事实。我要问的是,如果对只有 500 行的表 eav_attribute_option 的 20 个额外非常简单的查询会对性能产生任何影响。我应该关心它还是我在这里写的查询如此简单并且表格如此之小以至于它根本不会产生任何影响?
当然,我也可以使用 1 个查询来完成此操作,但这不再是问题了。我在问自己对 sql server 的这么多额外请求是否是一件坏事,而不是查询本身。