2016-06-20 5 views
1

У меня есть эта проблема, у меня есть «таблица продуктов», и она содержит описание продуктов, цену, категорию, подкатегорию и несколько других строк.echo Категории и подкатегории из таблицы mysql

У меня есть этот php-блок, который должен извлекать и эхо динамический аккордеон с категориями и подкатегориями и обрезать дубликаты.

Я чувствую, что я близко, но я мог бы быть миль ..

<?php 
    $sql = mysql_query("SELECT DISTINCT category FROM products"); 
    while($row = mysql_fetch_array($sql)) { 
    $category = $row['category']; 

    $sql2 = mysql_query("SELECT DISTINCT subcategory FROM products WHERE category = '$category'"); 
    while($row = mysql_fetch_array($sql2)) { 
    $subcategory = $row['subcategory']; 
    echo '<h3><a href="#">'.$category.'</a></h3> 
      <div> 
      <p><a href="#">'.$subcategory.'</a></p> 
      </div>'; 
    }} 
?> 

Проблема заключается в том, что я получаю дублируется Категории ..

enter image description here

+0

По вашему собственному коду данная категория может иметь несколько подкатегорий, и каждая подкатегория может отображаться с одним и тем же родителем. Что вы пытаетесь достичь здесь? –

+0

да, я боялся, что я не объяснил это хорошо .. каждая категория один раз, подкатегориями под .. снова один раз каждый .. –

+1

Пожалуйста, [прекратите использование 'mysql_ *' функций] (http://stackoverflow.com/questions/12859942/почему-я-не должны назначения-MySQL-функции-в-РНР). [Эти расширения] (http://php.net/manual/en/migration70.removed-exts-sapis.php) были удалены в PHP 7. Узнайте о [подготовленном] (http://en.wikipedia.org/ wiki/Prepared_statement) для [PDO] (http://php.net/manual/en/pdo.prepared-statements.php) и [MySQLi] (http://php.net/manual/en/mysqli.quickstart .prepared-statements.php) и подумайте над использованием PDO, [это действительно довольно легко] (http://jayblanchard.net/demystifying_php_pdo.html). –

ответ

0

Проблема заключается в том что вы эхом отдаете основную категорию <h3> внутри вложенной подкатегории while цикл. Простым решением было бы переместить это в внешнюю основную категорию while.

Вы также повторно используете переменную $row внутри вашей вложенной петли, которая является неаккуратной и может привести к путанице. Я переименовал обе эти переменные для ясности как $rowCategory и $rowSubCategory соответственно.

<?php 
$sql = mysql_query("SELECT DISTINCT category FROM products"); 
while($rowCategory = mysql_fetch_array($sql)) { 
    $category = $rowCategory['category']; 
    // move main categories up and out here 
    echo '<h3><a href="#">'.$category.'</a></h3>'; 

    $sql2 = mysql_query("SELECT DISTINCT subcategory FROM products WHERE category = '$category'"); 
    while($rowSubCategory = mysql_fetch_array($sql2)) { 
    $subcategory = $rowSubCategory['subcategory']; 
    // just echo subcategories here 
    echo '<div> 
      <p><a href="#">'.$subcategory.'</a></p> 
     </div>'; 
    } 
}