0

我正在考虑返回一个随机排序的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

注意:all the table rows were returned。在我的页面中,我需要一个<< >>按钮来向用户显示所需的数据“组”。我该如何编写这样的查询?

4

4 回答 4

2

您解释的问题的更好名称是随机打乱记录。确实,顺序是随机的,但是由于需要记住顺序,因此您别无选择,只能将其保存在列中。您可以通过保存随机填充的字段并根据该字段对记录进行排序来做到这一点。通过这种方式,您可以以无特定顺序对记录进行排序,同时记住该顺序以供将来的选择查询使用。每当您厌倦了订单时,您可以使用新的随机生成的值更新提到的字段以再次打乱它们。这是玩家在不重复播放歌曲两次的情况下随机播放播放列表的技术。

[编辑]

虽然第一个给定的解决方案是一般答案,但您可以在 MySQL 中使用一个 hack 来随机排序记录。通过这种方式,您只需存储它的种子即可记住订单。

SELECT * FROM tbl ORDER BY RAND(s);

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

于 2012-07-25T06:35:18.960 回答
0

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

  1. 如果表中的数据很大,请添加一列,告诉行所属的组。当用户单击 >> 或 << 按钮时,获取该特定组的行。

  2. 如果您正在处理少量数据,则可以在代码本身中执行此操作。

于 2012-07-25T06:18:31.443 回答
0

如果您使用ORDER BY RAND(),那么您将不得不在不建议的地方标记选定的记录。

您可以结合使用一些智能算法total_pagesID例如

SELECT *
FROM  my_table
ORDER BY MOD(ID, total_pages);
于 2012-07-25T06:35:56.423 回答
0

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

然后每次你需要随机化你运行的表

UPDATE table SET random_col = RAND()

现在每次你想检索结果时,你都会运行一个正常的选择

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

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

于 2012-07-25T06:38:12.097 回答