2012-10-09 109 views
0

我需要從數據庫打印酒單。 我需要首先打印一個分類,然後打印所有內部的項目。那是訂單。我有多個類別。所以最後結果將是categorie1,很多項目,categorie2很多項目...PHP嵌套循環。第二個循環如何根據第一個循環的id打印項目?

這是我現在寫的代碼:我認爲我的問題是根據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/>'; 
    }  
} 
+1

的'mysql'延伸是過時的並且不應再使用。改爲使用'MySQLi'或'PDO_MySQL'。見http://php.net/manual/en/function.mysql-connect.php – KingCrunch

+0

如果你想跟蹤最後一個項目,只需將它保存在一個變量 – keyser

+1

'for($ z = 0; $ k <$ n_bouteille; $ k ++){'在那裏發現問題? – MrCode

回答

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/>'; 
} 
1

後的查詢和第一while循環內正確地給id類別字段名稱試試這個。

$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>"; 
} 
0

你會想看看PHP的foreach構造。 Foreach循環遍歷整個數組結果,對於數組中的每個元素,它將提取其值,並且還可以選擇其鍵。這不需要使用mysql_num_rows。

您可以使用mysql_fetch_assoc從mysql_query獲取一行值,而不是調用mysql_result。該行的要獲取所有值,您可以將其併入一個循環甚至。如果你使用後者,你可以創建自己的鍵/值對數組,並在foreach構造中使用它。

另外請注意,使用mysql已經過時了,您現在想要使用mysqli,這與mysql非常相似。

相關問題