0

データベースからワインリストを印刷する必要があります。最初にカテゴリを印刷し、その後に中のすべてのアイテムを印刷する必要があります。それが注文です。そして、私は複数のカテゴリーを持っています。したがって、最終的に結果はcategorie1、多くのアイテム、categorie2多くのアイテムになります...

これは私が今から書くコードです:私の問題は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」を使用してから、行を希望どおりに並べ替えるのが最善だと思います。そうすれば、必要なループは1つだけになります。ループの実行中に、カテゴリ名を前のカテゴリ名と比較し、変更された場合はカテゴリ名を表示します。

$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_resultを呼び出す代わりに、mysql_fetch_assocを使用してmysql_queryから行の値を取得できます。行のすべての値を取得するために、これをループに組み込むこともできます。後者を行う場合は、キーと値のペアの独自の配列を作成し、これをforeach構造内で使用できます。

また、mysqlの使用は時代遅れであることに注意してください。ここで、mysqlと非常によく似たmysqliを使用する必要があります。

于 2012-10-09T15:00:51.277 に答える