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查询一随机?的主要内容,如果未能解决你的问题,请参考以下文章