如果我有两个带有各自列的表:
=====================
product_categories
=====================
id | name
=====================
=======================
products
=======================
id | category_id | name
=======================
我有以下PHP函数:
// Returns an array of all rows from the products
function getProducts() { ... }
// returns the corresponding row to the given id of the product category
function getProductCategory($category_id) { ... }
当前,我正在使用以下标题的表格显示所有产品的列表:
类别是与产品category_id
对应的类别的名称。
当前,我正在使用foreach循环来迭代产品,并为每个产品调用getProductCategory(...)
函数:
<?php
...
$products = getProducts();
foreach ($products as $product) {
$product_category = getProductCategory($product['category_id']);
...
}
...
?>
如果有很多产品具有很多重复的查询,那将是对数据库的大量查询。
如果getProducts()
函数在JOIN
L语句中使用SQ
包含所有类别信息,这将是一个好习惯吗?
答案 0 :(得分:1)
如果您想每次都获得f = open(nameDir, 'a')
,System.UnauthorizedAccessException: Access to the path "C:\\Order\\Media
44aa4857-3bac-4a18-a307-820450361662.mp4" is denied.
和id
,则应采用ONE方法,并避免采用一种category_name
,而应采用一种{{1} }上的每种产品,以及其他product_name
上的产品,以获取所有价值。
所以尝试这样的事情:
select
答案 1 :(得分:1)
是的,加入会更好。它将减少获取类别的查询数量。否则,您可以单独查询以获取如下代码所示的类别,但我建议您加入。
select
您必须在function getProductsData() {
$querie = 'SELECT
p.id, p.name,
pc.name as Category
FROM products as p
LEFT JOIN product_categories as pc on pc.id = p.category_id
ORDER BY p.name; -- optionnal
';
// Get the data and return them
// You should get an array with one row =
// id (of the product) / name (of the product) / Category (the name of the category)
}
中修改查询并添加//Removes all 3 types of line breaks
$string = str_replace("\r", "", $string);
$string = str_replace("\n", "", $string);
条件以比较类别ID
在$products = getProducts();
$categoryIds = [];
foreach ($products as $product) {
$categoryIds[] = $product['category_id'];
...
}
$product_category = getProductCategory($categoryIds);
中,您可以内嵌类别ID,以将其添加到getProductCategory()
子句中。