php - 基于数据库中的数据在 PHP 中动态构建菜单太慢

标签 php mysql sql database menu

我正在尝试使用以下代码创建动态菜单,但加载时间太长:

 <?php
 ob_start();
 include ('admin/db/db.php');

 echo '<li><a href="#">Exports</a>';
 $sql3 = "SELECT * FROM category_master where type = 'Export' order by      sequence asc ";
 $result3 = mysqli_query($connection, $sql3);

 if (mysqli_num_rows($result3) > 0)
     {

// output data of each row

echo '<ul>';
while ($userrows3 = mysqli_fetch_assoc($result3))
    {
    $cid = $userrows3['product_category_id'];
    $cname = $userrows3['category_name'];
    echo '<li><a href="category_details.php?cid=' . $cid . '&cname=' . $cname . '">' . $cname . '</a>';
    $sql4 = "SELECT group_product FROM products,category_master,cat_wise_pro where category_master.product_category_id = cat_wise_pro.category_id and products.product_id = cat_wise_pro.product_id and category_master.product_category_id =$cid group by products.group_product ";
    $result4 = mysqli_query($connection, $sql4);
    if (mysqli_num_rows($result4) > 0)
        {

        // output data of each row

        echo '<ul>';
        while ($userrows4 = mysqli_fetch_assoc($result4))
            {
            $gname = $userrows4['group_product'];
            echo '<li><a href="product_details.php?gname=' . $gname . '">' . $gname . '</a>';
            $sql5 = "SELECT product FROM products,group_products where products.group_product = group_products.group_product and  products.group_product = '$gname'";
            $result5 = mysqli_query($connection, $sql5);
            if (mysqli_num_rows($result5) > 0)
                {

                // output data of each row

                echo '<ul>';
                while ($userrows5 = mysqli_fetch_assoc($result5))
                    {
                    $pname = $userrows5['product'];
                    echo '<li><a href="product_info.php?pname=' . $pname . '">' . $pname . '</a>';
                    }

                echo '</ul>';
                }
            }

        echo '</ul>';
        }
    }
}

 echo '</ul>';
 ?>

我应该使用 View 而不是表... find below the view i create

有什么办法让它更快吗?

最佳答案

您的代码所做的是:

categories = load C categories from DB
foreach category:
    groups = load G groups from DB
    foreach group:
        products = load products from DB

向数据库发送 1 + C x G 查询。你应该做的是:

products = load products with groups with categories
$tree = [];
foreach ($products as $p):
    $tree[$p['category']][$p['group']][] = $p;

foreach ($tree as $category => $groups):
    foreach ($groups as $group => $products):
        foreach ($products as $p):
            ...

使用JOIN 一次获取数据,例如像这样的东西:

SELECT p.name as product, g.name as group, c.name as category
  FROM product p
  JOIN group_product g ON p.group_product = g.id
  JOIN category_master c ON g.category = c.id;

关于php - 基于数据库中的数据在 PHP 中动态构建菜单太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39833499/

相关文章:

php mysql 计算每个百分比

amazon-web-services - 每日自动将 mysql 数据库 Amazon RDS 快照备份到通过 SSH

sql - 将逗号分隔的值拆分为Oracle中的列

mysql - ORDER BY 日期在即将到来的日期之后的过去日期

php - 使用php将Mysql日期转换为JSON中的毫秒

php - 为什么我修改 php.ini 文件以启用 extension=php_pdo.dll、extension=php_pdo_mysql.dll 后会回显 "pdo support is NOT loaded"?

javascript - XMLhttprequest.send 在 PHP 中给出空白数组

php - 从相关表中获取值

mysql cli 到 127.0.0.1 但重定向到 172.17.0.1

php - 获取 Woocommerce 中带有空简短描述的所有产品 ID