Mysql SQL查询,返回带限制的随机排序行,可能吗?

Mysql SQL查询,返回带限制的随机排序行,可能吗?,mysql,sql,Mysql,Sql,我正在考虑返回一个随机排序的SQL响应,其中的结果是随机混合的,有一个限制。 问题是我需要所有的行返回,基本上分为组(行块)。我希望我明白了 例如,从表A中: ID | NAME | PROFESSION ++++++++++++++++++++++++++++++++ 1 | Jack | Carpenter 2 | Rob | Manager 3 | Phil | Driver 4 | Mary

我正在考虑返回一个随机排序的
SQL
响应,其中的结果是随机混合的,有一个限制。 问题是我需要所有的行返回,基本上分为组(行块)。我希望我明白了

例如,从表A中:

ID   |   NAME    |   PROFESSION
++++++++++++++++++++++++++++++++
1    |  Jack     |   Carpenter
2    |  Rob      |   Manager
3    |  Phil     |   Driver
4    |  Mary     |   Cook
5    |  Tim      |   Postman
6    |  Bob      |   Programmer
查询将返回如下内容:

限值为0,2时:

6    |  Bob      |   Programmer
4    |  Mary     |   Cook
限值为2,2:

1    |  Jack     |   Carpenter
5    |  Tim      |   Postman
限值为4,2:

3    |  Phil     |   Driver
2    |  Rob      |   Manager
注意:
返回了所有表行
。在我的页面中,我需要有一个
按钮,用于向用户显示所需的数据“组”。
如何编写这样的查询?

我可以在这里想到两件事:


  • 如果表中的数据很大,请添加一列,告知行所属的组。当用户单击>>或时,您解释的问题的更好名称将是随机洗牌记录。的确,顺序是随机的,但由于需要记住顺序,因此您别无选择,只能将其保存在列中。您可以通过保存一个随机填充的字段并根据该字段对记录进行排序来实现这一点。通过这种方式,您可以不按特定顺序对记录进行排序,而在将来的select查询中会记住该顺序。当您厌倦了顺序时,您可以使用新的随机生成的值更新所提到的字段以再次洗牌它们。这是一种技术,玩家可以在不重放歌曲两次的情况下对播放列表进行洗牌

    [编辑]

    虽然给出的第一个解决方案是一般的答案,但在MySQL中有一种可以用来随机排序记录的方法。这样,为了记住订单,您所需要存储的只是它的种子

    SELECT * FROM tbl ORDER BY RAND(s);
    

    例如,如果您想让每个用户以不同的随机顺序查看记录,可以使用他们的用户id作为种子。这样,每个用户看到记录的顺序将保持不变,但它是随机的,并且与其他用户不同。

    如果使用
    order BY RAND()
    ,则必须在不可取的地方标记所选记录

    您可以将
    total_pages
    ID
    组合使用一些智能算法,例如

    SELECT *
    FROM  my_table
    ORDER BY MOD(ID, total_pages);
    

    向表中添加一个名为random_col的列

    然后,每次需要对运行的表进行随机分组时

    UPDATE table SET random_col = RAND()
    
    现在,每次要检索结果时,都要运行一个普通的select

    SELECT * FROM table ORDER BY random_col ASC LIMIT x,y
    

    结果将以相同的顺序显示,直到您通过运行“更新”再次将其随机化为止。

    结果必须随机,因此添加列不会使其随机化。是的,大量数据从数据库返回数据的标准是什么?是一组完全随机的行,还是它们的任何规则决定了数据返回?完全正确。随机顺序。就像你在youtube上洗牌一样?一开始决定一个随机顺序,然后你只得到它的一部分。如果只有一个用户,这是一个好主意。如果两个用户使用这个,它会混合两个搜索的结果,尽管很小的可能性,两个col可能有相同的随机数。我想说这会要求用户提交的每个搜索都有一个新表?