我想做的是创建一个从数据库中提取的类别列表,然后在每个类别下面列出 相关的子类别。
到目前为止我有:
<?php
// this query lets us know that we are looking for matches that equal 2, which points to the subject of vehicles.
// from this query i am able to list all categories that are relevant to vehicles.
$getCategoriesQuery = $db->query("SELECT * FROM item_cat WHERE sub_id = '2'"); //2 = vehicles
?>
<?php
while($row = $getCategoriesQuery->fetch()){
echo '<ul>'.$row['category'].'';
}
?>
显示:
- motor vehicles
- railed vehicles
- aircraft
现在,当我将以下 while 循环添加到上面的循环时:
<?php
while($row = $getCategoriesQuery->fetch()){
echo '<ul>'.$row['category'].'';
// this has been added to try and get the sub categories
$getSubCatQuery = $db->query("SELECT * FROM item_cat, item_sub_cat
WHERE item_cat.cat_id = item_sub_cat.cat_id "); // cat_id
while($row = $getSubCatQuery->fetch()){
echo '<li><a href="vehicles.php?p='.$row['sub_category'].'" >'.$row['sub_category'].'</a></li>';
}
echo '</ul>';
}
?>
我得到:
- motor vehicles
- cars
- motorbikes
- buses
- trucks
- trains
- planes
-railed vehicles
- cars
- motorbikes
- buses
- trucks
- trains
- planes
-aircraft
- cars
- motorbikes
- buses
- trucks
- trains
- planes
当我想做的是:
-motor vehicles
- cars
- motorbikes
- buses
- trucks
-railed vehicles
- trains
-aircraft
- planes
我一开始尝试加入查询,但没有任何乐趣,所以我分成 2 个查询来尝试更好地了解情况。 我已经在第二个 while 循环中将“$row”更改为“$row2”,但这会给我一个“row2['sub_category']”的未定义索引错误
我也尝试过使用“foreach 循环”而不是第二个“while 循环”:
<?php
// this query lets us know that we are looking for matches that equal 2, which points to vehicles.
$getCategoriesQuery = $db->query("SELECT * FROM item_cat WHERE sub_id = '2'"); //vehicles
?>
<?php
while($row = $getCategoriesQuery->fetch()){
echo '<ul>'.$row['category'].'';
$getSubCatQuery = $db->query("SELECT * FROM item_cat, item_sub_cat
WHERE item_cat.cat_id = item_sub_cat.cat_id "); // cat_id
foreach ($getSubCatQuery->fetchAll () as $row2) {
echo '<li><a href="vehicles.php?p='.$row2['sub_category'].'" >'.$row2['sub_category'].'</a></li>';
}
echo '</ul>';
}
?>
我花了一整天的时间试图解决这个问题,但没有任何快乐——只有头痛。谁能告诉我哪里出错了......我错过了什么? - 如果不清楚,我也在使用 PDO。
提前致谢!
--更新-- 我已将 while 循环部分更改为:
<?php
while($row = $getCategoriesQuery->fetch()){
echo '<ul>'.$row['category'].'';
$getSubCatQuery = $db->query("SELECT * FROM item_sub_cat, item_cat WHERE item_sub_cat.cat_id ='".$row['cat_id']."' ");
while($sub_row = $getSubCatQuery->fetch()){
echo '<li><a href="vehicles.php?p='.$sub_row['sub_category'].'" >'.$sub_row['sub_category'].'</a></li>';
}
echo '</ul>';
}
?>
并且输出显示了正确类别中的事物....但是它通过我在数据库中的总记录复制了每个项目:
- motor vehicles
- cars
- motorcycles
- trucks
- buses
- cars
- motorcycles
- trucks
- buses
- cars
- motorcycles
- trucks
- buses
- cars
- motorcycles
- trucks
- buses
- cars
- motorcycles
- trucks
- buses
- railed vehicles
- trains
- trains
- trains
- trains
- trains
我已经尝试在查询中添加“LIMIT 1”和“GROUP BY”,但是每个类别只显示 1 个项目。
- motor vehicles
- cars
- railed vehicles
- trains
最佳答案
您的内部 while
循环正在重新分配 $row
数组变量。将其更改为另一个名称,例如 $sub_row
。
您的内部查询也不会根据外部查询的值而改变,因此每次都以完全相同的方式执行。使用类似的东西
SELECT * FROM item_sub_cat WHERE item_sub_cat.cat_id = $row["category_id"]
内部查询将允许结果依赖于外部查询的每个结果。
编辑:注意不要在查询中包含在输出方面不需要的表。仅当您需要执行两个表的连接时才包括它们。
关于php - 使用嵌套的 while 循环不提供所需的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35173950/