mysql多个sql查询或每个查询的join

g6ll5ycj  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(430)

如果有两个表及其各自的列:

=====================
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是与 category_id 产品名称。
目前我正在使用foreach循环遍历产品并调用 getProductCategory(...) 每种产品的功能:

<?php
...

$products = getProducts();

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

...
?>

如果有很多产品有很多重复的查询,那么这将是对数据库的大量查询。
如果 getProducts() 函数使用 JOINSQ 我的声明?

7ivaypg9

7ivaypg91#

如果你想得到 id , category_name 以及 product_name 每一次,你应该做一个方法,避免做一个 select ,然后是 foreach 在每一个产品和另一个 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)

}
6pp0gazn

6pp0gazn2#

是的,加入会更好。它将减少获取类别的查询数。否则,您可以按照下面的代码单独查询类别,但我建议您加入。

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

您必须在中修改查询 getProductCategory() 并添加 where in 比较中类别id的条件 getProductCategory() ,您可以内爆类别ID,以便将其添加到 where in 条款。

相关问题