Dies ist eine Frage der Effizienz/Best Practice. Ich hoffe, dass ich einige Rückmeldungen zur Leistung erhalte. Jeder Rat ist sehr willkommen.
Also hier ist ein wenig Hintergrund in dem, was ich eingerichtet habe. Ich benutze Codeigniter, die grundlegende Einrichtung ist ziemlich ähnlich zu jedem anderen Produkt Beziehungen. Grundlegende Tabellen sind: Marken, Produkte, Kategorien. Oben auf diese Tabellen gibt es eine Notwendigkeit für installieren Blätter, Marketing-Materialien, und Farben.
Ich habe einige Beziehungstabellen erstellt: Marken_Produkte Produkte_Farben Produkte_Bilder Produkte_Blätter
Ich habe auch eine Tabelle Categories_Relationships, die alle Beziehungen zu Kategorien enthält. Installationsblätter usw. können ihre eigenen Kategorien haben, aber ich wollte nicht für jeden Typ eine andere Kategorie-Beziehungstabelle definieren, weil ich nicht dachte, dass das sehr ausbaufähig sein würde.
Am vorderen Ende sortiere ich nach Marken und Kategorien.
Ich denke, damit ist der Hintergrund für den Teil über die Effizienz abgedeckt. Ich schätze, meine Frage bezieht sich hauptsächlich auf das Wetter, das es besser wäre, Joins zu verwenden oder separate Aufrufe zu machen, um einzelne Teile jedes Elements zurückzugeben (Farben, Bilder, etc.)
Was ich derzeit codiert haben funktioniert, und Sortierung gut, aber ich denke, ich kann die Leistung zu verbessern, wie es einige Zeit dauern, um die Abfrage zurück. Gerade jetzt seine Rückkehr etwa 45 Elemente. Hier ist meine erste Funktion es greift alle Produkte und seine Informationen.
Es funktioniert, indem Sie zunächst alle Produkte auswählen und verbinden es Marke Informationen. dann Schleife durch das Ergebnis, das ich die grundlegenden Informationen, aber für die Kategorien Bilder und Installationen ich bin mit Funktionen, die jedes der respektierten Elemente zurückgibt.
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;
}
Hier ist ein Beispiel für eine der Funktionen, mit denen die einzelnen Teile ermittelt werden.
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;
}
Ich bin also wieder auf der Suche nach Ratschlägen, wie man dies am effizientesten und am besten bewerkstelligen kann. Ich schätze wirklich jeden Rat oder jede Information.