MySQL ORDER BY随机简介

1,143 阅读5分钟

MySQL ORDER BY Random

MySQL ORDER BY随机简介

MySQL ORDER BY随机是一种MySQL技术,用于从特定MySQL数据库的表中随机查询数据记录。这个MySQL命令有助于非系统地获取带有ORDER BY子句的表行。例如,假设我们需要使用这个MySQL ORDER BY Random来从表中选择以下记录。

  • 一个博客中的几个随机帖子,并在特定的侧边栏中显示它们。
  • 一个随机的报价,用于呈现,"每日最新报价",像在小部件部分。
  • 在一个画廊中的随机图片,并将它们作为高亮的图片来实现。

基本上,在MySQL中,没有任何内置的语句可以从数据库表中选择非计划的表行。因此,为了这个目的,我们将应用MySQL的RAND()函数。

语法

让我们来看看显示ORDER BY RAND()函数工作的基本语法结构。

SELECT * FROM TableName ORDER BY RAND() LIMIT1;

对上述语法查询的解释。

  • MySQL RAND()函数负责为每个表行产生一个随机值。
  • 之后,ORDER BY子句有助于按照MySQL中RAND()函数产生的随机值或数字对所有表的行进行排序。
  • 接下来是LIMIT子句,它在一组随机排序的结果中挑选出初始表行。

假设,如果你想从数据库中的表中选择数值为'n'的随机记录行,那么我们需要修改LIMIT子句的值,如下所示。

SELECT * FROM TableName ORDER BY RAND() LIMIT N;

ORDER BY Random在MySQL中是如何工作的?

  • 在MySQL中,ORDER BY RAND()技术的作用是选择列值或从数据库表中随机显示的记录。SELECT语句被用来查询这种技术。
  • 我们将使用特定的函数RAND()对MySQL中的查询获取的记录进行排序。特别是,我们可以在建立音乐播放器时使用这种方法来洗刷歌曲列表,以便每个新的播放列表从数据库中的歌曲中产生,而不是以前的列表。
  • 这种随机选择记录的程序使其对数据行数较少的表很有用。此外,它在查询执行和结果显示方面的工作速度很快。
  • 但是,当用于一个大表时,这可能会减慢使用ORDER BY RAND()函数的执行过程。这是因为MySQL需要对整个表进行排序以找出随机值,这也是很耗时的。
  • 因此,这个命令查询的速度将取决于数据库表中的可用行数。因此,如果表由更多的记录组成,那么它将需要更多的时间在结果集中产生每行的随机值。

MySQL ORDER BY随机的例子

我们将用下面的例子来评估这种MySQL技术的演示。

例子#1 - 使用ORDER BY RAND()

让我们来看看一个名为Employees的数据库表,它有EmpID、EmpName、EmpProfile、EmpSalary、EmpPF等字段。

select * from employees;

MySQL ORDER BY Random output 1

假设我们使用下面的查询,以随机的方式从这个表中获取三条雇员记录。

SELECT EmpID, EmpName, EmpProfile FROM Employees ORDER BY RAND() LIMIT 3;

输出。

MySQL ORDER BY Random output 2

我们可以看到,由于使用了随机结果查询,所提供的结果与一般的结果有些不同。

示例#2 - 使用ORDER BY RAND()和INNER子句

在这个例子中,我们需要一个演示表,其字段有属性。PRIMARY KEY和自动增量。另外,在顺序系列中不应该有间隙。

现在,在主键表列的基础上,我们写了下面的查询来产生随机数行值。

SELECT ROUND( RAND() * (SELECT MAX(Col_ID) FROM TableName)) AS Col_ID;

有了上述查询提供的结果集,我们将按以下方式加入表。

SELECT y.* FROM TableName AS y INNER JOIN (SELECT ROUND( RAND() * (SELECT MAX(Col_ID) FROM TableName) ) AS Col_ID ) AS x WHERE y.Col_ID>= x.Col_ID LIMIT 1;

应用这个过程,我们需要执行一次以上的命令来随机获取多条记录。这是因为增加命令的限制将只提供从随机选择的行开始的序列行。

SELECT y.EmpID, y.EmpName FROM Employees AS y JOIN (SELECT ROUND( RAND() * (SELECT MAX(EmpID) FROM Employees) ) AS EmpID) AS x WHERE y.EmpID >= x.EmpID LIMIT 1;

输出。

MySQL ORDER BY Random output 3

例子#3 - 使用子查询的ORDER BY RAND()

通过前面的查询技术,我们可以应用子查询来进行随机排序,并按升序或降序查看名称,如下所示。

SELECT * FROM (SELECT * FROM Employees ORDER BY RAND() LIMIT 5)Empsub ORDER BY EmpName;

输出。

output 4

例子#4 - 使用ORDER BY RAND()使用变量

假设数据库表包括一个id列,其值落在1,...,n的范围内,并且不包含gab。那么我们需要按照以下步骤进行。

首先,在1,...,n范围内选择随机数。

接下来,我们将在随机数的基础上选择记录。为了实现这一目标,我们将使用后面的查询。

SELECT TableName.* FROM (SELECT ROUND( RAND() * (SELECT MAX(Col_ID) FROM TableName) ) RandomVal, @val:=@val + 1 FROM (SELECT @val:=0)AS y , TableName LIMIT n )AS x, TableName AS a WHERE x.RandomVal = a.Col_ID;

记住,用户定义的变量是已知的特定连接。这就意味着,在实施连接池的同时,不能实施继任技术。为此,我们还必须确认指定的表中具有PRIMARY KEY的列字段应该是数据类型为整数。除此以外,表的列值也应该在定义的系列中,而不是有任何空白。

总结

MYSQL ORDER BY RAND()对于显示随机排序的结果至关重要。就像任何与文章、网页、链接等有关的信息,我们希望以随机排序的方式从几个数据库中显示出来。

这种技术在MySQL中意义重大,但同时,如果一个表中的表是大尺寸的,那么应用于它的ORDER BY RAND()将耗费时间来生成结果。否则,对于具有较少记录的表,可以得到更快的结果。

推荐文章

这是一个关于MySQL ORDER BY Random的指南。在这里,我们讨论了如何在MySQL中进行ORDER BY随机工作,以及与输出有关的例子。你也可以看看下面的文章以了解更多------。

  1. MySQL的唯一索引(UNIQUE INDEX
  2. MySQL REGEXP
  3. MySQL中的自然连接
  4. MySQL索引