我在从mysql数据库中检索子类时遇到一些问题。我想显示父类别的子类别。我只能获得主类别的最后一个子类别。第一个子类别不显示**。在我的表中**我有category_id和category_parent_id.where category_parent_id对于父类别将为'0。。提前谢谢
<ul class="betterList">
<?php
$con = mysql_connect("localhost","root","pwd") or die('couldnot connect to database'.mysql_error());
mysql_select_db("DB",$con);
$result=mysql_query("select * from table ")or die("No table available with this name"."<br/><br/>".mysql_error());
while($row=mysql_fetch_array($result))
{
$parent_id=$row['category_parent_id'];
$category_id=$row['category_id'];
if($parent_id==0)
{
?>
<li>
<?php echo $row['category_id'].$row['name_en-GB'];
$result1=mysql_query("select * from table where category_parent_id=".$category_id)or die("No data available with this name"."<br/><br/>".mysql_error());
echo $num_row = mysql_num_rows($result1);
if($num_row>0) {
for($i=0;$i<$num_row;$i++)
{
while($row1=mysql_fetch_array($result1))
{
?>
<ul style="margin:0px;padding:0;">
<li><?php echo $row1['name_en-GB']?></li>
</ul>
<?php
}
}
}
?>
</li>
<?php } ?>
<?php }?>
</ul>
当我删除最后的<li>
标签并在结束时保留它,而我可以显示所有的子标记但css不适用于此。有些事情在那里出错了,但我无法想出来
答案 0 :(得分:1)
删除下方并重试:
for($i=0;$i<$num_row;$i++)
{
答案 1 :(得分:0)
for($i=0;$i<$num_row;$i++)
之后:
while($row1=mysql_fetch_array($result1))
这两条指令都循环使用此查询获得的每一行。
删除所有内容:
echo $num_row = mysql_num_rows($result1);
if($num_row>0) {
for($i=0;$i<$num_row;$i++) {
因为这没用。
循环结果的唯一重要事项是 而($ ROW1 = mysql_fetch_array($ RESULT1))
你也可以用更轻的mysql_fetch_assoc()替换mysql_fetch_array()。
您的代码可以优化,但这可以解决您的问题。
答案 2 :(得分:0)
不是使用嵌套循环,而是使用连接获取所有内容:
SELECT t1.category_id parent, t1.`name_en-GB` parent_name,
t2.category_id child, t2.`name_en-GB` child_name
FROM table t1
JOIN table t2 ON t2.parent_category_id = t1.category_id
WHERE t1.parent_category_id = 0
然后你的循环将是:
$last_parent = null;
$first_cat = true;
while ($row = mysql_fetch_assoc($result)) {
if ($row['parent'] != $last_parent) {
$last_parent = $row['parent'];
if (!$first_cat) { // Close out the last UL and LI
echo '</ul></li>';
} else {
$first_cat = false;
}
echo '<li>' . $row['parent'] . $row['parent_name'];
echo '<ul style="margin:0px;padding:0;">';
}
echo '<li>' . $row['child_name'] . </li>
}
if (!$first_cat) {
echo '</ul></li>';
}
你的代码中有太多的嵌套循环:你有一个for
和while
循环,它们都试图遍历内部查询的行。此外,您将每个孩子都放入了自己的<ul>
,这可能不是您想要的。
答案 3 :(得分:0)
试试这个解决方案是否适用于您,如果它可以正常调整您的代码
$result = mysql_query("select * from table WHERE category_parent_id = 0 ");
while($row=mysql_fetch_array($result)) {
$parent_id = $row['category_parent_id'];
$query = mysql_query("select * from table where category_parent_id = {$parent_id}");
while($sub_cats=mysql_fetch_array($query)) {
echo '<pre>'.print_r($sub_cats).'</pre>';
}
}
答案 4 :(得分:0)
只需在while循环之前添加内部<ul>
即可获得子类别。
<?php
echo "<ul>";
while($row1=mysql_fetch_array($result1))
{
?>
<li><?php echo $row1['name_en-GB']?></li>
<?php
}
echo " </ul>";