2012-05-01 14 views
0

は、私は2つのテーブルを持っているの作り方:レコード(カテゴリとサブカテゴリ)

categories (id, categoryName)、私はmenu 1つ以上のレコードを持っているすべてのカテゴリを表示したいと思い menu (id, menuname, category_id)

。 そしてcategoryNameの後にと表示します。

1つのレコードセットでこれを行うのは可能でしょうか?

ありがとうございました!

は、これらは私の2つのレコードです:

$query = "select a.id, a.name from categories as a where a.id in (select count(*) from menu as b on b.category_id = a.id)"; 
$result = mysql_query($query); 
while ($row = mysql_fetch_array($result)) { 
    echo $row['name']; 
    $category_id = intval($row['id']); 
    $query = "select menuname from menu where category_id = $category_id limit 0, 5"; 
    $resultmenu = mysql_query($query); 
    while ($rowmenu = mysql_fetch_array($resultmenu)) { 
     echo $rowmenu['menuname']; 
    } 
} 
+0

「*と、すべてのcategoryNameの後に5 menuname。*を表示するとはどういう意味ですか? – mattytommo

+0

はこれらの2つの質問ですか? –

答えて

0

前述したように、私は「5 MENUNAMEを表示する、すべてのカテゴリ名の後に」が何を意味するかわかりません。

しかし、あなたは以下を使用することができアルファベット順にすべてのカテゴリ/メニュー名のリストを表示する:

更新

あなたの最初のクエリのみで帰国することになる瞬間最高の1列。サブクエリは現在、menu行の数をカウントしています。この数値は、カテゴリテーブルから行を引き出すために使用されています。これは必要ではありません。

次のクエリは、少なくとも一つのアイテムが存在することを確実にするために、その後categoryフィールドによって基が各項目を一度だけ返されることを保証するためにmenuテーブルに参加:

$query = "select a.id, a.name from categories as a inner join menu as b on b.category_id = a.id group by a.id, a.name" 

アップデート2

申し訳ありませんが、わかりました。いいえ、1つのクエリで必要なものを達成することはできないと思います。可能であれば、私はそれをお勧めしません。あなたのコードを見ると、メニュー項目のセットごとにcategoryNameを1回だけ印刷したいだけです。あなたは1つの結果にcategoryNamemenunameアイテムを引き戻すことができた場合はそのように設定します。

| categoryName | menuname | 
--------------------------- 
| category1 | menu1 | 
| category1 | menu2 | 
| category1 | menu3 | 
| category2 | menu4 | 

結果を反復処理するときに、categoryNameは一回それをプリントアウトするために変わったとき、手動でチェックする必要がありますそのセットはmenunameです。

+3

OPはそれぞれの 'category'に対して5個以下の' menu'があるべきであると思ったのです。 – eggyal

+0

ありがとう!しかし私は別のものを意味しました。私は私の質問を編集しました。 –

+1

私の更新を見てください。 – weenoid

関連する問題