我有从表中显示随机项目的问题,是否有方法只显示一个随机项目,但不是我优先显示的项目不显示?
我有表 PRODUCT
和行
ID 标题 URL_TITLE
和
$link = "coffee";
我想从表PRODUCT中随机显示一个产品,但不是我在$ link中的相同
我想说的是我只想要从表中随机选项,但不能在$ link =“coffee”中获取随机元素
P.S URL_TITLE行中的$ link:)
答案 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