2

テストページのスライドショーに関連する特定のリクエストがあります: http://byweb.com/mealbook/

すべての大きな写真は、ランダムなカテゴリの画像で、そのカテゴリの 3 つのレシピがテキストにリストされている必要があります。小さなサムネイルには、任意のカテゴリのレシピがランダムに表示されます。

したがって、3 つのランダムなカテゴリ、これらのカテゴリからの 12 のレシピ (4 ごとにグループ化)、および残りとは無関係の 9 つのランダムなレシピがあるはずです...

データベース スキーム: カテゴリ: id、タイトル、parent_id カテゴリへのレシピ: id、rec_id、cat_id (レシピが複数のカテゴリに存在する可能性があるため、このテーブルが存在します) レシピ: id、名前など...

このクエリ:

SELECT category_recipe.rec_id, category_recipe.cat_id, recipes.name, recipes.url, recipes.main_image, categories.id, categories.title
FROM recipes, category_recipe, categories
WHERE categories.id
IN ( 10, 30, 64 )
AND category_recipe.cat_id = categories.id
AND category_recipe.rec_id = recipes.id
ORDER BY RAND( )
LIMIT 12

3 つのカテゴリから 12 のランダムなレシピを返しますが、カテゴリごとに 4 つのレシピが必要です...もっと多くの解決策が考えられると思います。おそらく、ネストされた選択などが必要になるでしょう....

4

2 に答える 2

0

そのクエリを 3 つのカテゴリごとに分割します。これらの選択が非常に単純で、速度が問題の場合は非常に高速になる場合、複雑にする理由はわかりません。

于 2013-02-06T01:57:32.337 に答える
0

これが必要だと思いますunion all

SELECT cr.rec_id, cr.cat_id, r.name, r.url, r.main_image, c.id, c.title

from ((select cr.* from category_recipe where cat_id = 10 order by rand() limit 4
      ) union all
      (select cr.* from category_recipe where cat_id = 30 order by rand() limit 4
      ) union all
      (select cr.* from category_recipe where cat_id = 64 order by rand() limit 4
     ) cr join
     categories c
     on cr.cat_id = c.id join
     recipes r
     on cr.rec_id = r.id

さらに、ANSI 標準の結合構文を使用する必要があります。エイリアスを使用すると、クエリも読みやすくなります。

于 2013-02-06T02:00:50.303 に答える