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

时间:2012-07-25 06:14:23

标签: mysql sql

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

答案 0 :(得分:2)

您解释的问题的更好名称是随机随机播放的记录。确实,订单是随机的,但由于需要记住订单,因此您别无选择,只能将其保存在列中。您可以通过保存随机填充的字段并根据该字段订购记录来完成此操作。这样,您可以在记住订单以便将来选择查询时按顺序订购记录。每当你厌倦了订单时,你可以用新的随机生成的值更新提到的字段,然后再次将它们洗牌。这是玩家用来随机播放播放列表而不重播两次歌曲的技术。

[编辑]

虽然第一个给定的解决方案是一般的答案,但是你可以在MySQL中使用黑客来随机排序记录。通过这种方式,您记住订单所需的所有内容都是它的种子。

SELECT * FROM tbl ORDER BY RAND(s);

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

答案 1 :(得分:0)

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

  1. 如果表中的数据很大,请添加一个列,告诉该组属于哪一行。当用户点击&gt;&gt;或&lt;&lt;按钮,获取该特定组的行。

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

答案 2 :(得分:0)

如果您使用ORDER BY RAND(),则必须在某处标记选定的记录,这是不可取的。

您可以结合total_pagesID使用某种智能算法,例如

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

答案 3 :(得分:0)

在表中添加一个名为 random_col

的列

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

UPDATE table SET random_col = RAND()

现在,每次要检索结果时,都会运行正常的选择

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

结果将以相同的顺序出现,直到您通过运行'UPDATE'再次随机化它们