ФорумРазработкаБазы данных → Нужна помощь с выбором товара из каталога

Нужна помощь с выбором товара из каталога

  • vladimir93

    Сообщения: 2 Репутация: N Группа: Кто попало

    Spritz 24 июля 2014 г. 1:44

    День добрый.

    Вообщем есть каталог товаров
    У всех групп есть id у каждой группы есть id родителя - id_merge
    у товаров в группе есть id родительской группы, тоже - id_merge
    Вообщем сейчас сайт отображает только товары из той категории в которую заходишь.
    Задача сделать так чтоб когда заходишь в категорию то в ней отображались все товары самой категории и вложенных категорий
    Уже голову сломал, 2 дня сижу. Помогите пожалуйста
  • md5

    Сообщения: 11950 Репутация: N Группа: в ухо

    Spritz 24 июля 2014 г. 1:58, спустя 14 минут 14 секунд

    а где запрос?
    все умрут, а я изумруд
  • vladimir93

    Сообщения: 2 Репутация: N Группа: Кто попало

    Spritz 24 июля 2014 г. 2:14, спустя 15 минут 50 секунд

    Сейчас это выглядит вот так

    $sql = "SELECT  SQL_CALC_FOUND_ROWS  * FROM `catalog` WHERE `type` = 'tovar'  AND `id_merge` = '{$cat}' AND `active` = 1 ORDER BY  `sort`, `id`  DESC LIMIT {$limit1}, {$tvonpage}";
    $res = mysql_query($sql);
    $num = mysql_fetch_row(mysql_query("SELECT FOUND_ROWS()"));
    $alltv = $num[0];
    $count = 0;
    $goodList = "";
    while ($row = mysql_fetch_assoc($res))
    {
    $imgArray = explode(",", $row['img']);
    $imgHtml = empty($imgArray[1]) ? &quot;&quot; : &quot;<img src=\&quot;/images/catalog/{$imgArray[1]}_2.jpg\&quot;/>&quot;;
    $goodList .=
    &quot;
    <tr>
    <td style=\&quot;vertical-align: top; padding: 20px 10px 0px 20px; text-align: center;\&quot;><a href=\&quot;/{$threadNow[&#39;link&#39;]}/&quot;.implode(&quot;/&quot;, catPath($row[&#39;id_merge&#39;])).($row[&#39;id_merge&#39;] != 0 ? &quot;/&quot; : &quot;&quot;).&quot;{$row[&#39;link&#39;]}\&quot;>{$imgHtml}</a></td>
    <td style=\&quot;vertical-align: top; padding: 20px 0px 0px 0px; width: 440px;\&quot;>
    <div style=\&quot;margin-bottom: 5px;\&quot;><a href=\&quot;/{$threadNow[&#39;link&#39;]}/&quot;.implode(&quot;/&quot;, catPath($row[&#39;id_merge&#39;])).($row[&#39;id_merge&#39;] != 0 ? &quot;/&quot; : &quot;&quot;).&quot;{$row[&#39;link&#39;]}\&quot; class=goodName>{$row[&#39;name&#39;]}</a></div>
    <div class=text>&quot;.substr(strip_tags($row[&#39;text&#39;]),0,200).&quot;</div>
    </td>
    <td style=\&quot;vertical-align: middle; padding: 20px 0px 0px 20px\&quot;>
    <div style=\&quot;margin-bottom: 15px; font-size: 18px; text-align: center;\&quot;>{$row[&#39;price&#39;]} руб.</div>
    <div style=\&quot;cursor: pointer;\&quot; class=addGood goodid=\&quot;{$row[&#39;id&#39;]}\&quot;><img src=\&quot;/images/toBin1.jpg\&quot; /><br />
    <font color=#fb6d2b><small><b><u>Доставка бесплатно!</u></b></small></font><br/>
    <small><small>при заказе от 5000 руб.</small></small></div>
    </td>
    </tr>
    &quot;;
    $count++;
    }


    $pages=ceil($alltv/$tvonpage);
    if ($page > $pages &amp;&amp; $page>1) header(&quot;Location: ?cat={$cat}&amp;page={$pages}&quot;);
    $noPage = false;
    if ($pages>1)
    {
    for ($i = 1; $i <= $pages; $i++)
    {
    if ($i < 5 || $i > ($pages - 5) || ($i > ($page - 5) &amp;&amp; $i < ($page + 5)))
    {
    if ($i!=$page) $pageHtml .= &quot;<div class=page><a href=&#39;?page={$i}&#39; class=page>{$i}</a></div>&quot;;
    else $pageHtml .= &quot;<div class=page><b style=\&quot;\&quot;>{$i}</b></div>&quot;;
    $noPage = false;

    }elseif(!$noPage){
    $pageHtml .= &quot;<b class=page>&amp;nbsp;…&amp;nbsp;</b>&quot;;
    $noPage = true;
    }
    }

    }

    $goodList = &quot;<table style=\&quot;margin: 20px 0px;\&quot;><tr><td>{$goodList}</td></tr></table>&quot;;

    if ($count == 0) $goodList .= &quot;<div class=text style=\&quot;margin: 20px 0px 0px 25px; color: #777777; font-size: 11px;\&quot;></div>&quot;;
    $goodList .= &quot;<div style=\&quot;margin: 25px 0px;\&quot;>{$pageHtml}</div>&quot;;
  • technobulka

    Сообщения: 4552 Репутация: N Группа: Джедаи

    Spritz 24 июля 2014 г. 4:56, спустя 2 часа 41 минуту 22 секунды

    Понял только это
    когда заходишь в категорию то в ней отображались все товары самой категории и вложенных категорий


    SELECT * FROM products
    INNER JOIN categories
    ON products.category_id = categories.id
    WHERE categories.id = 1 OR categories.parent_id = 1
    –где 1 - это id родительской категории

    Вроде так. Имена полей сам поставишь, какие нужно.
    Высокоуровневое абстрактное говно
  • artoodetoo

    Сообщения: 5138 Репутация: N Группа: в ухо

    Spritz 24 июля 2014 г. 11:53, спустя 6 часов 57 минут 13 секунд

    ему хочется товары из всех вложенных категорий. идея плохая помоему ) но решается она с помощью Nested Sets http://www.evanpetersen.com/item/nested-sets.html

    то есть структуру базы полюбому менять. затем добиться результата, а потом понять, что отображать все товары это не очень мудро.
    по твоей логике на верхнем уровне посетитель должен увидеть тупо список ВСЕХ товаров, затем список всех телефонов, затем список всех смартфонов и т.д.
    imho, тут что-то непродумано.

    ιιlllιlllι унц-унц
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 14 августа 2014 г. 10:59, спустя 20 дней 23 часа 6 минут

    @vladimir93,
    в таблице категорий заведи поле &quot;descendants&quot; и положи в него все категории-потомки
    можно пойти дальше, завести поле &quot;descendants_items&quot; и положить в него все товары, принадлежащие всем категориям-потомкам
    обновлять при добавлении/удалении/перемещении категорий или товаров
    не всё полезно, что в swap полезло

Пожалуйста, авторизуйтесь, чтобы написать комментарий!