Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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
MySQL-仅在需要时基于结果生成行_Mysql_Random_Rows - Fatal编程技术网

MySQL-仅在需要时基于结果生成行

MySQL-仅在需要时基于结果生成行,mysql,random,rows,Mysql,Random,Rows,我在MySQL上创建了一个视图,它会生成如下随机结果: SELECT final.tempval1, final.tempval2, final.tempval3 FROM ( SELECT temptable1.tempval4 AS tempval1, temptable5.word2 AS tempval2, temptable6.word3 AS tempval3 FROM ( SELECT temptable2.word1 AS tempval4, temptable2

我在MySQL上创建了一个视图,它会生成如下随机结果:

SELECT final.tempval1, final.tempval2, final.tempval3
FROM (
  SELECT temptable1.tempval4 AS tempval1, temptable5.word2 AS tempval2, temptable6.word3 AS tempval3
  FROM (
    SELECT temptable2.word1 AS tempval4, temptable2.word2 AS tempval5, temptable2.word3 AS tempval6
    FROM view_name temptable2
    LEFT JOIN view_name temptable3 ON temptable2.word1 = temptable3.word1
    LEFT JOIN view_name temptable4 ON temptable3.word2 = temptable4.word2 ORDER BY RAND() LIMIT 50 offset 3
  ) temptable1    
  LEFT JOIN view_name temptable5 ON temptable1.tempval4 = temptable5.word1
  LEFT JOIN view_name temptable6 ON temptable5.word2 = temptable6.word2
  LIMIT 0, 50
) final
ORDER BY RAND() LIMIT 50
从视图中选择word1、word2、word3\u name ORDER BY rand()LIMIT 50

word1 | word2 | word3 |
------+-------+-------+
foo2  | bar2  | baz2  |
foo1  | bar1  | baz1  |
foo3  | bar3  | baz3  |
我需要找到一种方法,从这3行中随机创建另外47行,以达到“极限”

该查询也将应用于类似的视图(超过50行),但在这种情况下,我仍然需要将限制设置为最大50行(忽略重复过程并从select返回行)

可能吗?我怎么做呢

更新 对不起,我会尽量解释清楚的。我有这样一个场景:

  • 我正在生成一些具有相同查询类型但不同WHERE子句的视图
  • 结果具有相同的列。差异将是返回的行数
  • 有些视图返回的行数超过50行,有些视图返回的行数少于50行
  • 目标是返回正好50行。如果视图返回的值小于50,则需要生成剩余的行。如果视图返回的行数超过50行,则仅返回50行

    例如:

  • View1返回3行。我需要生成47行以返回50行
  • View2返回55行。我不需要生成行,只想限制为50行
  • View3返回25行。我需要生成25行

您可以尝试以下方法:

SELECT final.tempval1, final.tempval2, final.tempval3
FROM (
  SELECT temptable1.tempval4 AS tempval1, temptable5.word2 AS tempval2, temptable6.word3 AS tempval3
  FROM (
    SELECT temptable2.word1 AS tempval4, temptable2.word2 AS tempval5, temptable2.word3 AS tempval6
    FROM view_name temptable2
    LEFT JOIN view_name temptable3 ON temptable2.word1 = temptable3.word1
    LEFT JOIN view_name temptable4 ON temptable3.word2 = temptable4.word2 ORDER BY RAND() LIMIT 50 offset 3
  ) temptable1    
  LEFT JOIN view_name temptable5 ON temptable1.tempval4 = temptable5.word1
  LEFT JOIN view_name temptable6 ON temptable5.word2 = temptable6.word2
  LIMIT 0, 50
) final
ORDER BY RAND() LIMIT 50

我花了一段时间才弄清楚您要找的是什么,但我仍然不确定我是否理解正确,因此如果它不起作用,请随时告诉我。

我尝试了您的代码,它生成了47行。我已经删除了偏移量,并将RAND()更改为“final”表,现在它正在工作,但我需要使用其他视图进行测试。谢谢我可以编辑你的帖子并将其设置为答案吗?我不知道这在stackoverflow上是如何工作的…哦,好吧。。。我以为你只需要47行:
我需要找到一种方法,从这3行中随机创建另外47行,以达到“极限”。
OOPS好的,我刚刚读了你的更新。。。无论如何,如果系统允许您编辑答案,请随意。不过我现在会编辑它,所以如果我误解了您所更改的内容,请告诉我。:)