优化PHP函数和SQL查询,从MySQL数据库中提取依赖数据
如果我有两个表及其各自的列:优化PHP函数和SQL查询,从MySQL数据库中提取依赖数据,php,mysql,optimization,query-optimization,Php,Mysql,Optimization,Query Optimization,如果我有两个表及其各自的列: 产品类别:id、名称 产品:id、类别\ id、名称 我有以下PHP函数: function getProducts(){…}//返回产品中所有行的数组 函数getProductCategory($category_id){…}//返回产品类别的给定id对应的行 目前,我正在表格中显示所有产品的列表,标题如下: 身份证 类别 名字 其中category是与产品的category_id相对应的类别的名称 目前,我正在使用foreach循环迭代产品,并为每个
- 产品类别:id、名称
- 产品:id、类别\ id、名称
function getProducts(){…}//返回产品中所有行的数组
函数getProductCategory($category_id){…}//返回产品类别的给定id对应的行
- 身份证
- 类别
- 名字
<?php
...
$products = getProducts();
foreach ($products as $product) {
$product_category = getProductCategory($product['category_id']);
...
}
...
?>
如果有很多产品有很多重复的查询,这将是对数据库的大量查询
有什么方法可以优化此操作吗?正如评论中所建议的,我决定通过使用
SQL JOIN
语句来使用即时加载,例如,我将获取所有产品的id,并在我的SQL查询中使用WHERE id in(…)
:
<?php
$products = getProducts();
$product_ids = array();
foreach ($products as $product) {
$product_ids[] = $product->id;
}
$product_categories_data = $db->query('SELECT * FROM products_categories WHERE id IN(?, ?, ?, ..., ?)', $product_ids);
?>
然后对结果执行其余的操作。您能使用
连接“急切加载”数据吗?@tadman那么这意味着我必须修改getProducts(){…}
函数,在该函数中,查询还将返回类别信息?大概是这样。如果这是一个定制的ORM,那么你将不得不重新发明更多的轮子。如果它是现有的,我会看看它是如何处理急切加载的。如果你还不太深入,也许你可以切换到一个支持良好的ORM,它可以为你做到这一点,开箱即用。@tadman这都是定制的是,我已经编写了查询数据库的大部分函数。但是你指的是使用预构建框架吗?有很多orm,比如、、等等。它们的复杂程度和使用它们的投入程度各不相同,但首先值得一看的是,切换到这一点是否比继续沿着纯定制的道路更容易。