У меня есть SQL-соединение. Но как я могу отобразить название категории только один раз?

0

Мне нужна небольшая помощь с простой проблемой SQL/PHP, с которой я сталкиваюсь. У меня есть список задач, хранящихся в таблице, а затем категории для задач в таблице tasks_categories. Там есть внешний ключ категорииID, связывающий две таблицы.

То, что я хотел бы сделать, - это перечислить первую категорию, а затем все задачи. Затем перечислите вторую категорию и эти задачи. В настоящее время я просто перечисляю задачи в формате дерева.

Как мне изменить свой код (вставляемый ниже), чтобы отображать имя категории один раз, а затем его задачи, а затем следующую категорию и т.д.?

$query = mysqli_query($mysqli,'SELECT * FROM tasks join tasks_categories using (categoryID)');
while ($row = mysqli_fetch_assoc($query)) {
    $menu_array[$row['taskID']] = array(
    'taskName' => $row['taskName'],
    'parentID' => $row['parentID'],
    'categoryName' => $row['categoryName'],
    'required' => $row['required']
    );
}

function generate_menu($parentID)
{
global $menu_array;
$has_child = false;

foreach($menu_array as $key => $value) {
if ($value['parentID'] == $parentID)  { 
        if ($has_child === false) {
            $has_child = true;
            echo '<ul>';
        }
        echo '<li>' . $value['taskName'];
        if ($value['required'] == 1) {
            echo '<span class="required">*</span>';
        }
        generate_menu($key);
        echo '</li>';
    }
}
if ($has_child === true) echo '</ul>';
}

generate_menu(0);
Теги:
join

1 ответ

1

Я бы изменил запрос с помощью ORDER BY categoryID ASC. Затем вы можете просто просмотреть результаты, отслеживая изменения категории. Каждый раз, когда он изменяется, вы печатаете имя категории и затем печатаете задания, пока не нажмете следующую категорию.

$currentCategoryID = -1;
foreach ( ... ) {
    // ... 
    if ($categoryID != $currentCategoryID) { // Category has changed!
        $currentCategoryID = $categoryID;

        // Show Category Name
    }

    // Continue listing
}
  • 0
    Это звучит не слишком сложно, но я не могу реализовать это на всю жизнь. Он повторяет имена категорий для каждой задачи. Есть идеи, что я могу делать не так?
  • 1
    Обновите свой код, используя то, что вы пытались, и кто-то может увидеть, что вы сделали не так. Зачем просить нас угадать?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню