PHP MySQL多个SQL查询或每个查询的JOIN

时间:2018-08-02 11:53:36

标签: php mysql function join

如果我有两个带有各自列的表:

=====================
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) { ... } 

当前,我正在使用以下标题的表格显示所有产品的列表:

  • id
  • 类别
  • 名称

类别是与产品category_id对应的类别的名称。

当前,我正在使用foreach循环来迭代产品,并为每个产品调用getProductCategory(...)函数:

<?php
...

$products = getProducts();

foreach ($products as $product) {
    $product_category = getProductCategory($product['category_id']);
    ...
}

...
?>

如果有很多产品具有很多重复的查询,那将是对数据库的大量查询。

如果getProducts()函数在JOIN L语句中使用SQ包含所有类别信息,这将是一个好习惯吗?

2 个答案:

答案 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()子句中。