【发布时间】:2014-01-24 15:57:14
【问题描述】:
好的,所以我有一个值列表,我想要它,以便用户可以选择任何 7 个不同的选项,它会从带有任何这些选项的表中随机选择 x 个值。
结构类似于
ImgID(唯一键)|站点ID |其他表
尝试 1: 我尝试的第一种方法是读取数据库中的任何选定值,并计算每个选定选项的数量。出现的数量存储在一个变量中(只需将其称为 num),并且也计算了总量。然后它选择一个介于 1 和最大数量之间的随机数,遍历 num 变量和各个数量,将其递增直到超过该值,从而显示随机值落在哪个选项值上。这可以正确随机选择选项,但仍然需要从数据库中进行另一个随机选择,这会导致下一次尝试。
尝试 2: 来自数据库的随机值似乎是合理的,但我想为什么不一次全部完成并跳过很多查询。我似乎无法让它正常工作,我正在使用这个网站 - http://akinas.com/pages/en/blog/mysql_random_row/ 并选择了底部方法来使用。这里有很多错误消息 - “无法保存结果集”、“执行被中断”、“与 mysql 服务器的连接丢失”和“不是有效的结果资源”
代码是
for($i=0;$i<count($sites)-1;$i++){
$siteinfo = explode("@",$sites[$i]);
$siteid = $siteinfo[0];
$sitegroup = $siteinfo[1];
if($i!=0){
$sqlextra .= " OR ";
}
$sqlextra .= "SiteID='".$siteid."'";
}
$sql="SELECT * FROM ImageList WHERE ImgID >= (SELECT FLOOR( MAX(ImgID) * RAND()) FROM
ImageList) AND Valid='1' AND (".$sqlextra.") ORDER BY ImgID LIMIT 1";
if(mysql_query($sql, $mysql_connect)){}
else{echo mysql_error();}
并且选择了几个选项的sql输出是
SELECT * FROM ImageList WHERE ImgID >= (SELECT FLOOR( MAX(ImgID) * RAND()) FROM ImageList) AND Valid='1' AND (SiteID='6' OR SiteID='7') ORDER BY ImgID LIMIT 1
我不太擅长 mysql,所以不确定我是否在某个地方出错了,但是如果有人有更好的方法来做到这一点,或者只是知道为什么我的不工作,我将不胜感激,干杯
【问题讨论】: