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