Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 最有效的方法是随机选择给定多个值的任何mysql值以匹配它_Php_Mysql - Fatal编程技术网

Php 最有效的方法是随机选择给定多个值的任何mysql值以匹配它

Php 最有效的方法是随机选择给定多个值的任何mysql值以匹配它,php,mysql,Php,Mysql,好的,我有一个值列表,我想要它,这样用户可以选择任何7个不同的选项,它将随机从表中选择x个值,其中任何一个选项 该结构类似于ImgID(唯一键)| SiteID |其他表 尝试1: 我尝试的第一种方法是读取数据库中的任何选定值,并计算每个选定选项的数量。发生的数量存储在一个变量中(只需称为num),并计算总数量。然后,它选择一个介于1和最大金额之间的随机数,用各个金额遍历num变量,递增它直到超过该值,显示随机值落在哪个选项值上。这可以正确地随机选择选项,但仍然需要从数据库中进行另一次随机选择,

好的,我有一个值列表,我想要它,这样用户可以选择任何7个不同的选项,它将随机从表中选择x个值,其中任何一个选项

该结构类似于
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