MySQL - 仅在需要时根据结果生成行

标签 mysql random rows

我在 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/

相关文章:

mysql - 如何使用 LOAD DATA INFILE 将数据导入特殊字符列名称

php - MySQL 用每个表的 where 子句连接三个表

mysql - 仅获取mysql中时间戳中的日期

php - 网站被黑的用户名、附加信息和密码已更改问题?

python - 在python中动态构建随机变量的函数

java - 与 Math.random() 和 ArrayList.remove() 相关的逻辑

excel - "Pivot"Excel 中的表格

c - 我的遗传算法 C 代码不起作用,它不进入 if 条件

c - C语言读取文件时如何将不同的列放入不同的数组中

mysql - 如何在mysql中获取随机行