За последние 24 часа нас посетили 37173 программиста и 1721 робот. Сейчас ищут 624 программиста ...

Сгруппировать атрибуты товаров

Тема в разделе "PHP и базы данных", создана пользователем TigerZaka, 5 окт 2012.

  1. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Всем привет!
    у меня есть три таблицы:
    rubric (id_rubric, name, parent_id)
    attributes (id_attr, type_attr)
    rubric2attr (id_rubric, id_attr)

    У категорий есть различные атрибуты, цвет, формат, производитель и т.д.

    Не могу понять как сгруппировать атрибуты вокруг категории.

    Код (Text):
    1.  
    2. $query = "SELECT ru.name AS rname, attr.type_attr AS tattr FROM `rubric` ru
    3.  LEFT JOIN `rubric2attr` ra ON ra.id_rubric = ru.id_rubric
    4.  LEFT JOIN `attributes` attr ON attr.id_attr = ra.id_attr";
    5.  $result = mysql_query($query);
    6.  while($get_categories = mysql_fetch_array($result)) {
    7.   printf ($get_categories['rname']." -> Атрибуты: ".$get_categories['tattr']."<br/>");
    8.  }
    получается примерно следующее:
    Бумага -> Атрибуты: Цвет
    Бумага -> Атрибуты: Формат
    Бумага -> Атрибуты: Производитель
    Стулья -> Атрибуты: Производитель
    Стулья -> Атрибуты: Материал

    Подскажите, как можно объединить атрибуты, чтобы полученные данные принимали вид:
    Бумага -> Атрибуты: Цвет, Формат, Производитель
    Стулья -> Атрибуты: Производитель, Материал
     
  2. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    подсказали такой способ:
    Код (Text):
    1. $query = "SELECT ru.name AS rname, GROUP_CONCAT(attr.type_attr SEPARATOR ',') AS tattr
    2. FROM `rubric` ru
    3. LEFT JOIN `rubric2attr` ra ON ra.id_rubric = ru.id_rubric
    4. LEFT JOIN `attributes` attr ON attr.id_attr = ra.id_attr
    5. GROUP BY rname
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    и какой массив получается?
     
  4. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    +------------------+-----------------------------------------+
    | rname | tattr |
    +------------------+-----------------------------------------+
    | Бумага | Цвет,Формат,Ширина,Высота,Производитель |
    | Стулья | Производитель,Материал |
    +------------------+-----------------------------------------+
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не понял.
    завардампить несколько строк можешь?
     
  6. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    мм..что именно? )
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    while($get_categories = mysql_fetch_array($result)) {
    printf ($get_categories['rname']." -> Атрибуты: ".$get_categories['tattr']."<br/>");
    var_dump($get_categories);
    }
     
  8. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Код (Text):
    1.  
    2. array(4) {
    3.   [0]=>
    4.   string(12) "Бумага"
    5.   ["rname"]=>
    6.   string(12) "Бумага"
    7.   [1]=>
    8.   string(74) "Цвет,Формат,Ширина,Высота,Производитель"
    9.   ["tattr"]=>
    10.   string(74) "Цвет,Формат,Ширина,Высота,Производитель"
    11. }
    12. array(4) {
    13.   [0]=>
    14.   string(12) "Стулья"
    15.   ["rname"]=>
    16.   string(12) "Стулья"
    17.   [1]=>
    18.   string(43) "Производитель,Материал"
    19.   ["tattr"]=>
    20.   string(43) "Производитель,Материал"
    21. }
    вобщем-то на выходе меня все устраивает, вот только не пойму, почему значения в массиве дублируются, за счет чего?
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    mysql_fetch_array -> mysql_fetch_assoc

    а ради чего ты такой компот из параметров хотел?
     
  10. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    чтобы значения свойства товаров отображались )