我有一个SQL连接。但是,如何只显示一次类别名称?

时间:2011-01-27 02:46:10

标签: php mysql join

我需要一些简单的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 个答案:

答案 0 :(得分:1)

我会使用ORDER BY categoryID ASC修改查询。然后,您可以循环查看结果,跟踪类别何时更改。每次更改时,都会打印类别名称,然后打印任务,直到您点击下一个类别。

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

        // Show Category Name
    }

    // Continue listing
}