0

我需要从数据库中打印酒单。我首先需要打印一个类别,然后是里面的所有项目。这就是顺序。而且我有多个类别。所以最后结果将是categorie1, many items,categorie2 many items...

这是我从现在开始编写的代码:我认为我的问题是根据 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/>';
    }       
}
4

3 回答 3

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>";
}
于 2012-10-09T14:59:10.340 回答
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/>';
}
于 2012-10-09T15:06:50.787 回答
0

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

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

还要注意mysql的使用已经过时了,你现在会想用mysqli,它和mysql很相似。

于 2012-10-09T15:00:51.277 回答