我在 MySQL 上创建了一个 View ,它会生成如下随机结果:
从 view_name ORDER BY rand() LIMIT 50 中选择 word1、word2、word3
word1 | word2 | word3 |
------+-------+-------+
foo2 | bar2 | baz2 |
foo1 | bar1 | baz1 |
foo3 | bar3 | baz3 |
我需要找到一种方法,从这 3 行中随机创建另外 47 行以达到“限制”。
查询也将应用于类似的 View (超过 50 行),但在这种情况下,我仍然需要将限制设置为最大值 50(忽略重复过程并从选择返回行)。
这可能吗?我怎样才能做到呢?
更新 抱歉,我会尽力解释得更好。我有这样的场景:
- 我使用相同类型的查询生成一些 View ,但使用不同的 WHERE 子句。
- 结果具有相同的列。差异将是返回的行数。
- 某些 View 返回超过 50 行,其他 View 返回更少。
目标是恰好返回 50 行。如果 View 返回的行数少于 50,我需要生成剩余的行。如果 View 返回超过 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
我花了一段时间才弄清楚您到底在寻找什么,但我仍然不确定我是否理解正确,因此如果它不起作用,请随时告诉我。
关于MySQL - 仅在需要时根据结果生成行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20168006/