Php 最有效的方法是随机选择给定多个值的任何mysql值以匹配它
好的,我有一个值列表,我想要它,这样用户可以选择任何7个不同的选项,它将随机从表中选择x个值,其中任何一个选项 该结构类似于Php 最有效的方法是随机选择给定多个值的任何mysql值以匹配它,php,mysql,Php,Mysql,好的,我有一个值列表,我想要它,这样用户可以选择任何7个不同的选项,它将随机从表中选择x个值,其中任何一个选项 该结构类似于ImgID(唯一键)| SiteID |其他表 尝试1: 我尝试的第一种方法是读取数据库中的任何选定值,并计算每个选定选项的数量。发生的数量存储在一个变量中(只需称为num),并计算总数量。然后,它选择一个介于1和最大金额之间的随机数,用各个金额遍历num变量,递增它直到超过该值,显示随机值落在哪个选项值上。这可以正确地随机选择选项,但仍然需要从数据库中进行另一次随机选择,
ImgID(唯一键)| SiteID |其他表 尝试1: 我尝试的第一种方法是读取数据库中的任何选定值,并计算每个选定选项的数量。发生的数量存储在一个变量中(只需称为num),并计算总数量。然后,它选择一个介于1和最大金额之间的随机数,用各个金额遍历num变量,递增它直到超过该值,显示随机值落在哪个选项值上。这可以正确地随机选择选项,但仍然需要从数据库中进行另一次随机选择,这将导致下一次尝试 尝试2: 来自数据库的随机值似乎是合理的,但我想为什么不一次完成所有操作并跳过许多查询呢。我似乎不能让它正常工作,虽然,我使用这个网站-并选择了底部方法使用。这里有很多错误消息-“无法保存结果集”、“执行被中断”、“与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();}
我不太擅长mysql,所以不确定我是否在某个地方出了问题,但如果有人有更好的方法来做这件事,或者只是知道我的mysql不工作的原因,我将不胜感激,干杯
select * from ImageList where Valid='1' AND (SiteID='6' OR SiteID='7') order by RAND() Limit 1
这应该更有效:)
ORDER BY RAND()
永远不应该被认为是有效的-它真的不是,请阅读OP中链接到的文章,例如:啊,谢谢,工作非常完美:)编辑:哦,它似乎在大约1秒内工作,但有9000个值,所以这有点慢还是正常?
select * from ImageList where Valid='1' AND (SiteID='6' OR SiteID='7') order by RAND() Limit 1