我有一個函數,它接受一個類別的名稱並返回與該類別關聯的所有過濾器組以及與每個組關聯的過濾器。 但是有太多的循環和查詢進行,有沒有辦法改善下面的代碼?帶有太多循環的SQL查詢
public function getCategoryFilters($category_id) {
// get category filter groups
$query = $this->app['db']->query("SELECT filter_group_id
FROM " . DB_PREFIX . "category_filter
WHERE category_id = '" . (int)$category_id . "'
");
if($query->rows) :
foreach ($query->rows as $group) :
$filter_group_query = $this->app['db']->query("
SELECT DISTINCT fg.filter_group_id, fgd.name, fg.sort_order
FROM " . DB_PREFIX . "filter_group fg
LEFT JOIN " . DB_PREFIX . "filter_group_description fgd ON (fg.filter_group_id = fgd.filter_group_id)
WHERE fg.filter_group_id = '" . $group['filter_group_id'] . "'
AND fgd.language_id = '1'
GROUP BY fg.filter_group_id
ORDER BY fg.sort_order, LCASE(fgd.name)");
foreach ($filter_group_query->rows as $filter_group) :
$filter_data = array();
$filter_query = $this->app['db']->query("
SELECT DISTINCT f.filter_id, fd.name FROM " . DB_PREFIX . "filter f
LEFT JOIN " . DB_PREFIX . "filter_description fd ON (f.filter_id = fd.filter_id)
WHERE f.filter_group_id = '" . (int)$filter_group['filter_group_id'] . "'
AND fd.language_id = '1'
ORDER BY f.sort_order, LCASE(fd.name)");
foreach ($filter_query->rows as $filter) :
$filter_data[] = array(
'filter_id' => $filter['filter_id'],
'name' => $filter['name']
);
endforeach;
if ($filter_data) :
$filter_group_data[] = array(
'filter_group_id' => $filter_group['filter_group_id'],
'name' => $filter_group['name'],
'filter' => $filter_data
);
endif;
endforeach;
endforeach;
return $filter_group_data;
endif;
}
我將實現這兩種方法,並在執行時間方面看到兩者之間的差異。如果第二個建議運行得更快,我將評論這些功能解決方案,並將其作爲參考。非常感謝。 – user1709251