我在测试页面上有关于幻灯片显示的具体请求: http://bybyweb.com/mealbook/
所有大图片都应该是来自随机类别的图片,文本中列出了该类别的三个食谱。 小缩略图应显示任何类别的随机食谱。
所以,应该有3个随机类别,12个来自这些类别的食谱(按4分组),以及9个随机食谱,与其他类别无关......
数据库方案: category:id,title,parent_id category_to_recipe: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个食谱...... 我想有更多可能的解决方案,我可能需要嵌套选择,或者其他......
答案 0 :(得分:0)
我会将这三个类别中的每个类别的查询分开,我没有看到使其变得如此复杂的原因,当这些选择非常简单时,如果速度是你的问题,它将会非常快速。
答案 1 :(得分: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标准连接语法。使用别名,您的查询也会更具可读性。