我需要一些简单的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);
答案 0 :(得分:1)
我会使用ORDER BY categoryID ASC
修改查询。然后,您可以循环查看结果,跟踪类别何时更改。每次更改时,都会打印类别名称,然后打印任务,直到您点击下一个类别。
$currentCategoryID = -1;
foreach ( ... ) {
// ...
if ($categoryID != $currentCategoryID) { // Category has changed!
$currentCategoryID = $categoryID;
// Show Category Name
}
// Continue listing
}