MySQL-仅在需要时基于结果生成行
我在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
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好的,我刚刚读了你的更新。。。无论如何,如果系统允许您编辑答案,请随意。不过我现在会编辑它,所以如果我误解了您所更改的内容,请告诉我。:)