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

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

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

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

$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);

1 Ответ

1 голос
/ 27 января 2011

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

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

        // Show Category Name
    }

    // Continue listing
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...