我的代码有问题。使用n子类别显示所有类别的最佳方法是什么?
我的MySQL数据库看起来像:
CREATE TABLE categories (
category_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
parent_id INT UNSIGNED NOT NULL DEFAULT 0,
name TEXT NOT NULL,
user INT NOT NULL,
PRIMARY KEY (category_id),
INDEX parent (parent_id)
);
user
来自其他表格的ID(如果类别包含user = '2'
,则id = '2'
的用户可以看到该类别)
category_id parent_id name user
1 0 Main category 1 2
2 1 Subcategory 1 2
3 1 Subcategory 2 2
4 3 SubSubcategory 1 2
我的PHP代码:
<?php
include('config.php'); //Mysql connect file
//get id from user
if($_GET['id'] != $user_id) {
$id = $_GET['id'];
//check to make sure the user is an admin, who can change mysql
$result = mysql_query("SELECT * FROM users WHERE username = '$username' AND admin = '1'");
$rowCheck = mysql_result($result, 0);
//if the query returns a number, we know the user is an admin. And here we can VIEW our categories
if($rowCheck > 0) {
$user_result = mysql_query("SELECT * FROM users, categories WHERE id = '$id'");
while($row = mysql_fetch_array($user_result)) { ?>
<ol>
<li><a href=""><?php echo $row['name']; ?></a></li>
</ol>
<?php }
} else {
echo "You are not admin";
}
//bla bla bla etc.
...
}
如何查看
等类别<ol>
<li>
<a href="">Main category 1</a>
<ol>
<li><a href="">Subcategory 1</a></li>
<li><a href="">Subcategory 2</a>
<ol>
<li><a href="">Subsubcategory 1</a></li>
</ol>
</li>
</ol>
</li>
</ol>
答案 0 :(得分:3)
试试这个
$result = mysql_query("SELECT * FROM users WHERE username = '$username' AND admin = '1'");
$rowCheck = mysql_result($result, 0);
//if the query returns a number, we know the user is an admin. And here we can VIEW our categories
if($rowCheck > 0) {
//First fetch only parent categories
$first_level_cats = mysql_query("SELECT * FROM categories WHERE user = '$id' AND parent_id = 0");
echo '<ol>';
while($row = mysql_fetch_array($first_level-cats)) { ?>
<li><a href=""><?php echo $row['name']; ?></a></li>
<?php
$second_level_cats = mysql_query("SELECT * FROM categories WHERE user = '$id' AND parent_id = $row['id']");
echo '<ol>';
while($row = mysql_fetch_array($second_level-cats)) { ?>
<li><a href=""><?php echo $row['name']; ?></a></li>
<?php
$third_level_cats = mysql_query("SELECT * FROM categories WHERE user = '$id' AND parent_id = $row['id']");
echo '<ol>';
while($row = mysql_fetch_array($sthird_level-cats)) { ?>
<li><a href=""><?php echo $row['name']; ?></a></li>
<?php
}
echo '</ol>'; //third level close
?>
}
echo '</ol>'; // second level close
?>
<?php }
echo '</ol>'; // first level close
} else {
echo "You are not admin";
}
//bla bla bla etc.
...
}
我已尽力解决您的问题,根据您的table name and columns
交叉检查schema
。
答案 1 :(得分:2)
$user_result = mysql_query("SELECT * FROM users, categories WHERE id = '$id'");
$categories = array();
while($row = mysql_fetch_array($user_result)) {
$categories[$row['parent_id']][] = $row['name'];
}
echo "<ol><li><a href''>$categories[0][0]</a><ol>";
$counterj = count($categories)-1;
for($i=1,$j=$counterj;$i<$j;$i++){
if(count($categories[$i])==1){
echo "<li><a href="">$catgeories[$i][0]</a></li>";
} else {
echo "<li><a href="">$categories[$i][0]</a><ol>";
}
$counterl = count($categories[$i])-1;
for($k=1,$l=$counterl;$k<$l;$k++){
echo "<li><a href="">$categories[$i][$k]</a></li>";
}
if ($l>1) echo "</ol></li>";
}
echo "</ol></li></ol>";
} else {
echo "You are not admin";
}