Помогите с выборкой категорий из БД

zokeoner

Новичок
Есть таблица товаров product с полями id, name, description
таблица с категориями category с полями id, name
таблица для связей категорий и товаров category_to_product с полями id, id_product, id_category

Задача в том чтобы вывести в описании товара все категории к которым он относится...

начал писать код но понимаю что получается какой то некрасивый бред...

PHP:
$sql=("select * from product");
$result=  mysql_query($sql);
while($row=mysql_fetch_array($result)){
    echo $row['id'];
    echo ';';
    echo $row['name'];
    echo ';';
    
    $sql_category=("select * from product_to_category where id_product=".$row['id']);
    $result_category=  mysql_query($sql_category);
    while($row_category=  mysql_fetch_array($result_category)){
        echo $row_category['category_id'];
        echo ",";
    }

}
и еще таким же образом название категории

подскажите пожалуйста правильный способ решения данной задачи.
 

WMix

герр M:)ller
Партнер клуба
PHP:
select 
    pc.id_product, 
    p.name as product, 
    pc.id_category, 
    c.name as category
from product p
left join product_to_category pc on p.id = pc.id_product
left join category c on pc.id_category = c.id
 

zokeoner

Новичок
PHP:
select 
    pc.id_product, 
    p.name as product, 
    pc.id_category, 
    c.name as category
from product p
left join product_to_category pc on p.id = pc.id_product
left join category c on pc.id_category = c.id
Большое спасибо за ответ, пытался сделать нечто подобное через inner join, но проблема возникла на стадии вывода в РНР.

Подскажите как вывести данный массив через РНР ибо у меня при выводе дублируются записи в которых более 1 категории.

Пример:

Товар1 - категория 1
Товар1 - категория 2
Товар1 - категория 3
Товар2 - категория 1
Товар2 - категория 2

а надо

Товар1 - категория1 категория 2 категория 3
Товар2 - категория1 категория 2

Надеюсь на Вашу помощь.
 

WMix

герр M:)ller
Партнер клуба
далее обычный цикл по результату и пересборка в то что нужно
PHP:
while($row=mysql_fetch_array($result)){
  $products[ $row['id_product'] ]['name'] = $row['product'];
  $products[ $row['id_product'] ]['categories'][ $row['id_category'] ] = $row['category'];
}
print_r($products);
возможно еще order by добавить надо... но в общем дальше сам!
PHP:
select 
    p.id as id_product, << замени на всякий случай
 

zokeoner

Новичок
далее обычный цикл по результату и пересборка в то что нужно
PHP:
while($row=mysql_fetch_array($result)){
  $products[ $row['id_product'] ]['name'] = $row['product'];
  $products[ $row['id_product'] ]['categories'][ $row['id_category'] ] = $row['category'];
}
print_r($products);
возможно еще order by добавить надо... но в общем дальше сам!
PHP:
select 
    p.id as id_product, << замени на всякий случай
Большое спасибо!Дальше буду пробовать сам)
 
Сверху