For loop发出3600个数据库请求以加载产品。PHP
问题:有一个问题(我们目前可以确定)是,在加载较长的产品列表时,客户机产品列表会多次(3600次)调用数据库 代码:For loop发出3600个数据库请求以加载产品。PHP,php,magento,Php,Magento,问题:有一个问题(我们目前可以确定)是,在加载较长的产品列表时,客户机产品列表会多次(3600次)调用数据库 代码: 在for循环中不应该有数据库查询调用。您需要在开始时构建一个查询,以获取for循环之前所需的所有数据 我能看到的一些即时指针是: $grand_child_show = Mage::getModel('catalog/category')->load($grand_child->getId()); if ($grand
在for循环中不应该有数据库查询调用。您需要在开始时构建一个查询,以获取for循环之前所需的所有数据
我能看到的一些即时指针是:
$grand_child_show = Mage::getModel('catalog/category')->load($grand_child->getId());
if ($grand_child_show->getShowSidebar() == 1) {
$url = Mage::getModel('catalog/category')->load($grand_child_show->getId())->getURL();
这是在无缘无故地调用数据库两次,您应该能够执行以下操作:
$grand_child_show = Mage::getModel('catalog/category')->load($grand_child->getId());
if ($grand_child_show->getShowSidebar() == 1) {
$grand_child_show->getURL();
如果在脚本开始时调用以下函数,则应该能够删除所有这些“GetModel”函数:
$all_grand_children = Mage::getModel('catalog/category')->getAllCategories();
这将返回一个散列数组,通过在for循环中执行以下操作,您可以访问该散列数组中的相关项:
$grand_children = $all_grand_children[$subcat->getId()];
这将取代
$grand_children = Mage::getModel('catalog/category')->getCategories($subcat->getId());
您还应该对所有grand_child和cat_show对象进行初始调用。如果您精通SQL,您可以通过在一个SQL查询中连接表来调用相关信息。不用担心!如果你有任何问题,请告诉我!我绝对会的!再次感谢你@jodran121sa如果可能的话,你能告诉我你将如何实施这个吗?
$grand_children = Mage::getModel('catalog/category')->getCategories($subcat->getId());