2013-08-22 168 views
0

我有问题显示随机项从表中,有没有办法只显示一个随机项目,但不是我不愿意显示的项目?Mysql查询一个随机?

我有表产品

和行

ID TITLE URL_TITLE

$link = "coffee"; 

我希望显示表产品随机只是一个产品,而是不是我在$链接

我想说什么,我只是想从表中随机项,而不是当在$链接=“咖啡”,以获取随机元素

PS $链接在URL_TITLE行:)

+0

[一个很好的阅读](http://stackoverflow.com/a/9946238) – HamZa

+0

我现在限制1,这很容易,但要获得随机项目,但没有指定? –

+0

您没有阅读整篇文章 – HamZa

回答

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,但是如果你有一大堆你不能选择,你可能会调用这个查询很多次(这是不好的)。

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

尽管我不知道PHP,但我认为一个简单的方法是通过$link值作为where条件的一部分。

使用 '纯' SQL:

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

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

您可以使用它像这样:

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

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