我在显示表格中的随机项目时遇到问题,有没有办法只显示一个随机项目,而不是我不希望显示的项目?
我有桌子PRODUCT
和行
ID 标题 URL_TITLE
和
$link = "coffee";
我想从表 PRODUCT 中随机显示一种产品,但与 $link 中的产品不同
我想说的是我只想从表中随机项目,但不是在 $link="coffee" 中获取该随机元素
ps $link in URL_TITLE 行:)
这应该有助于:
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,但如果您有一大堆无法选择,您可能会多次调用此查询(这很糟糕)。
在查询中使用 rand() 并不理想,尤其是在大型表中,但即使是小型表,因为您永远不知道它们何时会增长(即站点或服务超出您的期望等)。
你可以像这样使用它:
select item from product where item != '$link' ORDER BY rand() LIMIT 1
但是您应该使用更好的东西,例如临时表,或者您可以在一次查询中从数据库中选择所有 ID,使用 PHP 从它们中随机选择一个,然后使用 PHP 选择的 ID 并从数据库中获取数据.
SELECT id
FROM PRODUCT
WHERE URL_TITLE != "coffee"
ORDER BY RAND()
LIMIT 1;
虽然我不了解 PHP,但我认为一种简单的方法是将$link
值作为where
条件的一部分传递。
使用“纯”SQL:
select *
from product
where URL_TITLE <> 'coffee'
order by rand()
limit 1