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

时间:2014-01-24 15:57:15

标签: php mysql

好的,所以我有一个值列表,我想要它,以便用户可以选择任意7个不同的选项,并且它将从表中随机选择x个值以及任何这些选项。

结构就像
ImgID(唯一键)| SiteID |其他表格

尝试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所以不确定我是否在某个地方出错了,但是如果有人有更好的方法做到这一点或者只是知道为什么我的工作没有用,那就不胜感激了,欢呼声< / p>

1 个答案:

答案 0 :(得分:1)

select * from ImageList where Valid='1' AND (SiteID='6' OR SiteID='7') order by RAND() Limit 1

这应该更有效率:)