mysql查询一随机?

Posted

技术标签:

【中文标题】mysql查询一随机?【英文标题】:Mysql query one random? 【发布时间】:2013-08-22 20:56:58 【问题描述】:

我在显示表格中的随机项目时遇到问题,有没有办法只显示一个随机项目,而不是我不希望显示的项目?

我有桌子PRODUCT

和行

身份证 标题 URL_TITLE

$link = "coffee";

我想随机显示 PRODUCT 表中的一种产品,但与 $link 中的产品不同

我想说的是我只想从表中随机项目,而不是在 $link="coffee" 中获取该随机元素时

附言 URL_TITLE 行中的 $link :)

【问题讨论】:

A nice reading 我现在限制1,这很容易,但是要随机获得,但我没有指定? 你没有阅读整篇文章 【参考方案1】:

这应该会有所帮助:

SELECT ID, TITLE, URL_TITLE 
FROM PRODUCT 
WHERE URL_TITLE != "coffee" 
ORDER BY RAND() 
LIMIT 1;

请注意,在某些 SQL 版本中,!= 写作<>

显然,您想选择所有行或不同的子集,只需使用 SELECT * 或您需要的任何内容。

编辑:根据 HamZa 的评论和 James 的回答,在大桌子上使用 ORDER BY RAND() 是不好的做法。您可能会生成一个随机 ID 并选择它,检查它是否不是您的非法 ID,但如果您有一大堆您无法选择,您可能会多次调用此查询(这很糟糕)。

【讨论】:

【参考方案2】:

在查询中使用 rand() 并不理想,尤其是在大型表中,但即使是小型表,因为您永远不知道它们何时会增长(即站点或服务超出您的预期等)。

你可以这样使用它:

select item from product where item != '$link' ORDER BY rand() LIMIT 1

但是您应该使用更好的东西,例如临时表,或者您可以在一次查询中从数据库中选择所有 ID,使用 php 从它们中随机选择一个,然后使用 PHP 选择的 ID 并获取数据来自数据库。

【讨论】:

【参考方案3】:
SELECT id
FROM PRODUCT
WHERE URL_TITLE != "coffee"
ORDER BY RAND()
LIMIT 1;

【讨论】:

【参考方案4】:

虽然我不懂 PHP,但我认为一个简单的方法是将 $link 值作为 where 条件的一部分传递。

使用“纯”SQL:

select *
from product
where URL_TITLE <> 'coffee'
order by rand()
limit 1

【讨论】:

以上是关于mysql查询一随机?的主要内容,如果未能解决你的问题,请参考以下文章

按随机和字段排序 MySQL 查询?

在查询随机简单查询时丢失与MySQL服务器的连接

MySQL查询随机数据的4种方法和性能对比

在 MySQL 查询中按随机混合的记录排序

Mysql中随机查询数据的几种算法

返回的 MySQL 查询结果是半随机的/不一致的顺序