Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从3个(或更多)随机类别中选择4个随机项目_Php_Mysql - Fatal编程技术网

Php 从3个(或更多)随机类别中选择4个随机项目

Php 从3个(或更多)随机类别中选择4个随机项目,php,mysql,Php,Mysql,我对测试页面上的幻灯片有特殊要求: 所有的大图片应该是一个随机类别的图片,文本中列出了该类别的三个食谱。 小缩略图应该显示任意类别的随机食谱 所以,应该有3个随机类别,12个食谱从这些类别(分组4),和9个随机食谱,无关的休息 数据库方案: 类别:id、标题、家长id 类别至配方:id、rec_id、cat_id(此表位于此处,因为配方可以位于多个类别中) 食谱:id、姓名等 此查询: SELECT category_recipe.rec_id, category_recipe.cat_id,

我对测试页面上的幻灯片有特殊要求:

所有的大图片应该是一个随机类别的图片,文本中列出了该类别的三个食谱。 小缩略图应该显示任意类别的随机食谱

所以,应该有3个随机类别,12个食谱从这些类别(分组4),和9个随机食谱,无关的休息

数据库方案: 类别:id、标题、家长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个配方。。。
我想可能会有更多的解决方案,我可能需要嵌套选择,或者其他什么…

我会将该查询分为3个类别,我看不出有什么理由让它如此复杂,当这些选择非常简单,如果速度是你的问题,它们会非常快。

我认为你需要
联合所有人

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标准联接语法。通过使用别名,您的查询也会更具可读性。

是的,我不太关心速度(因为这只是页面上的一个元素,而且会有更多的db请求)。因此,您建议我在第一次查询时选择3个随机类别,然后,当我获得id->时,对每个配方组进行3个单独的查询(这样我可以在每个类别中获得4个配方),然后对其余配方(缩略图)进行一次查询?看看这个,可能会给出一些输入