PHP嵌套循环。如何在第二个循环上根据第一个循环的id打印项目?

时间:2012-10-09 14:45:38

标签: php nested-loops

我需要从数据库中打印酒单。 我需要首先打印一个类别,然后打印出所有内部的项目。那个订单。我有多个类别。所以最后结果将是分类1,许多项目,类别2很多项目......

这是我现在写的代码:我认为我的问题是根据alcool_categorie的id打印项目!!

$q_vine = "SELECT * FROM alcool_categorie ";
$r_vine = mysql_query($q_vine,$connection);
$n_vine = mysql_num_rows($r_vine);
$q_bouteille = "SELECT * FROM alcool_item where ALCNID = '$alid'";
$r_bouteille = mysql_query($q_bouteille,$connection);
$n_bouteille = mysql_num_rows($r_bouteille);
for($i = 0; $i < $n_vine; $i++){
    echo mysql_result($r_vine,$i,'named').'<br/><br/>';
    for($z = 0; $k < $n_bouteille; $k++){
        echo mysql_result($r_bouteille,$k,'name').'<br/>';
    }       
}

3 个答案:

答案 0 :(得分:1)

在查询中以及第一个id循环内正确提供类别while字段名称后尝试此操作。

$q_vine = "SELECT id, named FROM alcool_categorie ";
$r_vine = mysql_query($q_vine,$connection);
$n_vine = mysql_num_rows($r_vine);
while ($row = mysql_fetch_assoc($r_vine)) {
  $categories[$row['id']] = $row;
}

$q_bouteille = "SELECT name, ALCNID FROM alcool_item ";
$r_bouteille = mysql_query($q_bouteille,$connection);
$n_bouteille = mysql_num_rows($r_bouteille);
while ($row = mysql_fetch_assoc($r_bouteille)) {
  $items[$row['ALCNID']] = $row;
}

foreach ($categories as $category_id=>$category) {
  echo "<ul><li>{$category['named']}<ul>";
  foreach ($items[$category_id] as $item) {
    echo "<li>{$item['name']}</li>";
  }
  echo "</ul></li></ul>";
}

答案 1 :(得分:1)

我认为最好在查询中使用“JOIN”,然后按照您希望的方式对行进行排序,那么您只需要一个循环。运行循环时,将类别名称与先前的类别名称进行比较,如果更改,则显示类别名称。

实施例

$sql    = "SELECT categoryName, bottleName FROM category INNER JOIN bottle ON category.categoryId = bottle.categoryId ORDER BY category.categoryId";
$result = mysql_query($sql,$connection);

$categoryName = ''; //just to make sure the first time the Category is named

while ($row = mysql_fetch_assoc($result)) {
    if($categoryName != row['categoryName']){
        $categoryName = row['categoryName'];
        echo '<h1>'.$categoryName.'</h1>';
    }
    echo row['bottleName'].'<br/>';
}

答案 2 :(得分:0)

您将需要查看PHP的foreach构造。 Foreach循环遍历整个结果数组,对于数组中的每个元素,它会提取其值以及可选的其键。这不需要使用mysql_num_rows。

您可以使用mysql_fetch_assoc从mysql_query中获取行的值,而不是调用mysql_result。行要获取所有值,您可以将其合并到循环中。如果你执行后者,你可以创建自己的键/值对数组,并在foreach结构中使用它。

另外请注意,mysql的使用已经过时,你现在要使用mysqli,这与mysql非常相似。