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

时间:2013-11-23 21:20:12

标签: mysql random rows

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

SELECT word1,word2,word3 FROM view_name ORDER BY rand()LIMIT 50

word1 | word2 | word3 |
------+-------+-------+
foo2  | bar2  | baz2  |
foo1  | bar1  | baz1  |
foo3  | bar3  | baz3  |

我需要找到一种方法,从这3行中随机创建另外47行以达到“限制”。

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

有可能吗?我怎么能这样做?

更新 的    对不起,我会尽力解释一下。我有这种情况:

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

    E.g:

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

1 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

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

我花了一段时间才弄明白你到底要找什么,我仍然不确定我是否理解正确,如果它不起作用,请随时告诉我。