Mysql查询一个随机?

时间:2013-08-22 20:56:59

标签: php mysql

我有从表中显示随机项目的问题,是否有方法只显示一个随机项目,但不是我优先显示的项目不显示?

我有表 PRODUCT

和行

ID 标题 URL_TITLE

$link = "coffee";

我想从表PRODUCT中随机显示一个产品,但不是我在$ link中的相同

我想说的是我只想要从表中随机选项,但不能在$ link =“coffee”中获取随机元素

P.S URL_TITLE行中的$ link:)

4 个答案:

答案 0 :(得分:3)

这应该有所帮助:

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,但如果您有一大堆您无法选择,您可能会多次调用此查询(这很糟糕)。 / p>

答案 1 :(得分:1)

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

你可以像这样使用它:

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

使用'纯'SQL:

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