0

私は2つのテーブルを持っています:

categories (id, categoryName)menu (id, menuname, category_id)

に 1 つ以上のレコードがあるすべてのカテゴリを表示したいと考えていますmenu。そして毎回categoryName5 を表示しmenunameます。

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'];
    }
}
4

1 に答える 1

0

上で述べたように、「And after every categoryName to show 5 menuname」の意味がわかりません。

ただし、すべてのカテゴリ/メニュー名のリストをアルファベット順に表示するには、次を使用できます。

SELECT      C.categoryName,
            M.menuname
FROM        categories C
INNER JOIN  menu M ON M.category_id = C.id
ORDER BY    C.categoryName,
            M.menuname

更新

現時点では、最初のクエリはせいぜい 1 行しか返しません。サブクエリは現在menu行数をカウントしており、この数字はカテゴリ テーブルから行を取得するために使用されていますが、これはあなたが望むものではありません。

次のクエリはmenu、少なくとも 1 つのアイテムが存在することを確認するためにテーブルに結合し、categoryフィールドごとにグループ化して、各アイテムが 1 回だけ返されるようにします。

$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

あ、すみません、今わかりました。いいえ、単一のクエリで目的を達成することは不可能だと思います。出来たとしてもオススメはしません。コードを見ると、categoryNameメニュー項目のセットごとに 1 回だけ出力する必要があります。次のように、1 つの結果セットで項目categoryNameと項目を引き戻すことができた場合:menuname

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

結果を繰り返し処理するときは、categoryNameそのアイテムのセットに対して一度印刷するために、いつ変更されたかを手動で確認する必要がありmenunameます。

于 2012-05-01T08:03:20.117 に答える