Результаты запроса PHP / MySQL

#php #mysql

#php #mysql

Вопрос:

Возникла проблема с query..my в wscategories хранятся основные категории интернет-магазина, а в моей таблице wssubcategories хранятся подкатегории таблицы с внешним ключом, называемым «parentcategory». Я пытаюсь перечислить основные категории с подкатегориями под ними в стиле:

Верх

Футболки

Плетеные

Свитера

Брюки

Шорты

Джинсы

Запрос / результат, который я написал, следующий:

 $query = "SELECT DISTINCT a.categoryname AS maincategory, b.categoryname AS   
smallcategory FROM wscategories a, wssubcategories b WHERE a.SECTION = 'girls' AND  
b.parentcategory = a.id";
      $result = mysql_query($query) or die(mysql_error());
      while ($row = mysql_fetch_array($result))
      {

        echo $row['maincategory'];

        echo "<br/>";
        echo $row['smallcategory'];
        echo "<br/>";
      }
  

Который возвращает:

Верх

Футболки

Верх

Свитера

Верх

Плетеные

И т.д. Я хочу, чтобы скрипт просто отображал основную категорию один раз, а затем подкатегории под ней, а не отображал ее несколько раз. Любая помощь?

Ответ №1:

попробуйте что-то вроде этого

 // note we need to order by maincategory for this to work
//
$query = "SELECT DISTINCT a.categoryname AS maincategory, b.categoryname AS   
smallcategory FROM wscategories a, wssubcategories b WHERE a.SECTION = 'girls' AND  
b.parentcategory = a.id
ORDER BY maincategory ASC,
smallcategory ASC
";
      $result = mysql_query($query) or die(mysql_error());


      // keep track of previous maincategory
      $previous_maincategory = NULL;

      while ($row = mysql_fetch_assoc($result))
      {

        // if maincategory has changed from previouscategory then display it
        if ($previous_maincategory != $row['maincategory']) {
            echo $row['maincategory'];
        }

        echo "<br/>";
        echo $row['smallcategory'];
        echo "<br/>";

        // record what the previous category was
        $previous_maincategory = $row['maincategory'];
      }
  

Ответ №2:

Установите флаг после повторения основной категории, например:

 $echoed_main = false;
while ($row = mysql_fetch_array($result)) {
    if (!$echoed_main) {
        echo $row['maincategory'];
        echo "<br/>";
        $echoed_main = true;
    }
    echo $row['smallcategory'];
    echo "<br/>";
}