【发布时间】:2011-11-11 17:30:23
【问题描述】:
这是一个效率/最佳实践问题。希望收到一些关于性能的反馈。非常感谢任何建议。
所以这里是我设置的一些背景知识。我正在使用 codeigniter,基本设置与任何其他产品关系非常相似。基本表是:品牌、产品、类别。除了这些表格之外,还需要安装表、营销材料和颜色。
我创建了一些关系表: 品牌_产品 产品展示_颜色 产品_图片 Products_Sheets
我还有一个 Categories_Relationships 表,其中包含与类别的所有关系。安装表等可以有自己的类别,但我不想为每种类型定义不同的类别关系表,因为我认为这不会非常可扩展。
在前端,我按品牌和类别进行排序。
我认为现在涵盖了效率部分的背景。我想我的问题主要与天气有关,最好使用连接或单独调用以返回每个项目的各个部分(颜色、图像等)
我目前编写的代码正在运行,并且排序很好,但我认为我可以提高性能,因为返回查询需要一些时间。现在它返回大约 45 件物品。这是我的第一个函数,它获取所有产品及其信息。
它首先选择所有产品并加入其品牌信息。然后循环遍历结果,我设置了基本信息,但是对于图像和安装类别,我使用的是返回每个受人尊敬的项目的函数。
public function all()
{
$q = $this->db
->select('*')
->from('Products')
->join('Brands_Products', 'Brands_Products.product_id = Products.id')
->join('Brands', 'Brands.id = Brands_Products.brand_id')
->get();
foreach($q->result() as $row)
{
// Set Regular Data
$data['Id'] = $row->product_id;
$data['Name'] = $row->product_name;
$data['Description'] = $row->description;
$data['Brand'] = $row->brand_name;
$data['Category'] = $this->categories($row->product_id);
$data['Product_Images'] = $this->product_images($row->product_id);
$data['Product_Installs'] = $this->product_installs($row->product_id);
$data['Slug'] = $row->slug;
// Set new item in return object with created data
$r[] = (object)$data;
}
return $r;
}
这是用于获取各个部分的函数之一的示例。
private function product_installs($id)
{
// Select Install Images
$install_images = $this->db
->select('*')
->where('product_id', $id)
->from('Products_Installs')
->join('Files', 'Files.id = Products_Installs.file_id')
->get();
// Add categories to category object
foreach($install_images->result() as $pImage)
{
$data[] = array(
'id' => $pImage->file_id,
'src' => $pImage->src,
'title' => $pImage->title,
'alt' => $pImage->alt
);
}
// Make sure data exists
if(!isset($data))
{
$data = array();
}
return $data;
}
所以真的只是在寻找关于什么是最有效、最佳实践的方法的建议。我非常感谢任何建议或信息。
【问题讨论】:
标签: mysql performance codeigniter