Как отобразить все категории для всех продуктов в MySQL и PHP? - PullRequest
0 голосов
/ 09 июня 2019

Я новичок в MySQL и PHP, и мне нужна ваша помощь, чтобы узнать решение.Я хотел бы отобразить список продуктов и связанных с ними категорий.Продукты и категории находятся во многих отношениях.Решения Google очень смущают меня.Буду очень признателен за любые советы.

Мой код отображает дубликаты продуктов.Дублируется столько раз, сколько имеет категория.Например:

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;

1 Ответ

1 голос
/ 09 июня 2019

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...