0

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

我有桌子PRODUCT

和行

ID 标题 URL_TITLE

$link = "coffee";

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

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

ps $link in URL_TITLE 行:)

4

4 回答 4

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

于 2013-08-22T21:04:29.863 回答
1

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

你可以像这样使用它:

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

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

于 2013-08-22T21:08:20.753 回答
0
SELECT id
FROM PRODUCT
WHERE URL_TITLE != "coffee"
ORDER BY RAND()
LIMIT 1;
于 2013-08-22T21:03:38.247 回答
0

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

使用“纯”SQL:

select *
from product
where URL_TITLE <> 'coffee'
order by rand()
limit 1
于 2013-08-22T21:03:47.387 回答