好吧,所以我有一个值列表,我想要它,以便用户可以选择任何7个不同的选项,并且它将随机从表中随机选择x值x这些选项。
串成像
imgid(唯一键)|siteid |其他表
尝试1:我尝试过的第一个方法是为任何选定值读取数据库,并计算每个选定选项的金额。事件的数量存储在一个变量中(只称其为num),总数也被计算出来。然后,它选择一个随机数在1和最大量之间,并用单个金额贯穿数字变量,将其递增直至超过该值,从而揭示了降落的随机值的选项值。这可以正确选择选项,但是它仍然需要数据库中的另一个随机选择,这会导致下一个尝试。
尝试2:数据库中的随机值似乎是合理的,但是我认为为什么不一次全部执行所有问题并跳过很多查询。不过,我似乎无法正常工作,我正在使用此站点-http://akinas.com/pages/en/blog/mysql_random_row/,并选择了底部的mehod。此处有很多错误消息 - "无法保存结果集","执行被中断","丢失到MySQL Server"one_answers"不是有效的结果资源"
代码是
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,所以不确定我是否在某个地方出错,但是如果有人有更好的方法或只是知道我的为什么不起作用,那将不胜感激,请愉快
select * from ImageList where Valid='1' AND (SiteID='6' OR SiteID='7') order by RAND() Limit 1
这应该更有效:)