如何在 MySQL 和 PHP 中显示所有产品的所有类别?

Posted

技术标签:

【中文标题】如何在 MySQL 和 PHP 中显示所有产品的所有类别?【英文标题】:How to display all categories for all products in MySQL and PHP? 【发布时间】:2019-06-08 22:07:34 【问题描述】:

我是 mysqlphp 的初学者,我需要您的帮助来了解解决方案。我想显示产品和相关类别的列表。产品和类别是多对多的关系。谷歌的解决方案让我很困惑。我将非常感谢任何建议。

我的代码显示重复的产品。复制的次数与类别相同。 例如:

Product1 - Category1;
Product1 - Category2;
Product1 - Category3;
Product2 - Category1;
Product3 - Category3;

index.php:

$result = $pdo -> query('
SELECT product.id, 
       product.name AS product_name, 
       seller.name AS seller_name, 
       category.name AS category_name
  FROM product
  LEFT JOIN seller ON product.sellerid = seller.id
  LEFT JOIN product_category ON product.id = product_category.productid
  LEFT JOIN category ON product_category.categoryid = category.id
');

foreach($result as $row)

    $products[] = array(
        'id' => $row['id'], 
        'product_name' => $row['product_name'],
        'seller_name' => $row['seller_name'],
        'category_name' => $row['category_name']
    );

index.html.php:

<ul>
    <?php foreach($products as $product): ?>
    <li>
        <span><?php htmlout($product['id']); ?></span>
        <span><?php htmlout($product['product_name']); ?></span>
        <span><?php htmlout($product['seller_name']); ?></span>
        <ul>
            <li>
                <span><?php htmlout($product['category_name']); ?></span>
            </li>
        </ul>
    </li>
    <?php endforeach; ?>
</ul>

如何显示每个产品的所有类别?循环应该是什么样的?我想实现:

Product1 - Category1, Category2, Category3;
Product2 - Category1;
Product3 - Category3;

【问题讨论】:

仅供参考,您可以写$products[] = $row,因为您没有更改任何键。 我看不出为什么它只会为每个产品显示一个类别。你能展示一些示例数据吗? 或者只是$products = $result-&gt;fetchAll(); 我的代码更广泛,键也变了。我更改了代码的一些元素,使其在论坛中更具可读性。不过谢谢你,我不知道! 哦,我的错。结果显示重复产品的次数与类别的数量一样多。我将立即在问题中更改这一点。例如:产品 1 - 类别 1;产品 1 - 类别 2;产品 1 - 类别 3;产品 2 - 类别 1;产品 3 - 类别 2;它应该:Product1 - Category1,Category2,Category3;产品 2 - 类别 1;产品 3 - 类别 2; 【参考方案1】:

您可以使用GROUP_CONCAT() 获取每行中的所有卖家和类别。

SELECT product.id, product.name,
    GROUP_CONCAT(DISTINCT seller.name) AS sellers,
    GROUP_CONCAT(DISTINCT category.name) AS categories
  FROM product
  LEFT 
  JOIN seller 
    ON product.sellerid = seller.id
  LEFT 
  JOIN product_category 
    ON product.id = product_category.productid
  LEFT
  JOIN category 
    ON product_category.categoryid = category.id
GROUP BY product.id

【讨论】:

天啊!有用!没有你的帮助,我永远找不到答案!非常感谢!

以上是关于如何在 MySQL 和 PHP 中显示所有产品的所有类别?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MySQL 中插入多行 PHP

php和mysql如何加入表[重复]

PHP+MySQL 中的前端产品变体?

如何获得两天之间的所有日子的数组,并将其显示在一个列表中?

php [MarketPress] - 管理产品列表。在管理产品表中添加选择选项“无类别”。这应该显示所有产品

php过滤mysql多个复选框