Это вопрос эффективности / передовой практики. Надеемся получить обратную связь по производительности. Любой совет с благодарностью.
Так что вот небольшой фон в том, что у меня есть настройки. Я использую codeigniter, базовая настройка очень похожа на любые другие отношения продукта. Основные таблицы: бренды, продукты, категории. Поверх этих таблиц необходимо установить листы, маркетинговые материалы и цвета.
Я создал несколько таблиц отношений:
Brands_Products
Products_Colors
Products_Images
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;
}
Итак, еще раз просто посмотрим на советы о том, какой самый эффективный и лучший способ сделать это. Я очень ценю любые советы или информацию.