Php 如何从数据库中选择随机ID(不包括已删除的ID)?

Php 如何从数据库中选择随机ID(不包括已删除的ID)?,php,mysql,codeigniter,random,Php,Mysql,Codeigniter,Random,我有一个横幅表,其中有图像名称和图像文件的路径,每次访问者导航到另一个页面时都会随机查看这些图像文件 banner表由banner_id自动递增、唯一、主、tinyint、banner_名称varchar和banner_路径varchar字段组成 横幅表将通过控制面板进行编辑。新的横幅将被添加,一些横幅将在一段时间后被删除,并且可能会被更新。一般积垢处理,你知道 现在。。。因为我的目标是随机显示横幅,我需要一个随机数生成器函数,它能够排除特定的横幅 更清楚地说, 假设我的桌子是这样的: bann

我有一个横幅表,其中有图像名称和图像文件的路径,每次访问者导航到另一个页面时都会随机查看这些图像文件

banner表由banner_id自动递增、唯一、主、tinyint、banner_名称varchar和banner_路径varchar字段组成

横幅表将通过控制面板进行编辑。新的横幅将被添加,一些横幅将在一段时间后被删除,并且可能会被更新。一般积垢处理,你知道

现在。。。因为我的目标是随机显示横幅,我需要一个随机数生成器函数,它能够排除特定的横幅

更清楚地说,

假设我的桌子是这样的:

banner_id     banner_name     banner_path
---------     ------------    ------------
1             First Banner    first_banner.jpg
2             Second Banner   second_banner.jpg
3             Third Banner    third_banner.jpg
我可以很容易地使用PHP函数获得随机ID:mt_random1,3

但是等等。如果我删除其中一个横幅怎么办

banner_id     banner_name     banner_path
---------     ------------    ------------
1             First Banner    first_banner.jpg
3             Third Banner    third_banner.jpg
在这种情况下,当随机输出变为2时,会发生什么?没有2号横幅的行??因此,我必须从随机生成器编号范围中排除已删除的id。这是最好的做法吗?如果是,我该怎么做

我完全愿意接受任何能帮助我做我想做的事情的新想法

请帮我解决这个问题

谢谢


谢谢。

为什么不选择一个随机行,而不是使用PHP选择一个随机ID来显示

SELECT * FROM `banners` ORDER BY RAND() LIMIT 0,1;
如果您有一个要排除的ID数组

SELECT * FROM `banners` 
WHERE `banner_id` NOT IN (/* array values*/) 
ORDER BY RAND() LIMIT 0,1;

假设你可以在比赛窗口很小的情况下生活,你可以这样做

SELECT FLOOR(RAND()*COUNT(*)) AS bannercount FROM banners;
并将其存入$bannercount,下一次运行

SELECT * FROM banners ORDER BY banner_id LIMIT $bannercount,1

您将从可用ID创建一个数组,并从该数组生成随机数

选择FLOORRAND*COUNT*进入@offset from Banner; 选择*从横幅限制@offset,1;
因为这是一个性能杀手:它将获取所有的横幅,每个横幅都是calclulate RAND,然后订购,然后扔掉除一个之外的所有横幅。@EugenRieck解释得很清楚:嗯。。我不太清楚这个答案。你能解释一下这种方法是如何给我提供随机性的吗s1064-您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“FLOORRAND*4,1”附近使用的正确语法在phpMyAdmin SQL窗口中甚至不起作用?我错过了什么sDidn不知道MySQL会被计算阻塞-将其移动到选择阶段,现在可以工作了。是的,它工作了!非常感谢。它经常重复相同的结果,但我认为这是关于行数的问题,行数不是很大,是MySQL随机引擎,对吗?