Sql Access db:随机选择一行,但要考虑权重

Sql Access db:随机选择一行,但要考虑权重,sql,ms-access,random,coldfusion,Sql,Ms Access,Random,Coldfusion,我看着 在那里我找到了我需要的东西,但我需要它在Access db上 我正在使用ColdFusion构建我的页面,我想输出图像。我还想给图像赋予一个权重,这样数字越高的图像显示的频率就越高,权重越低的图像显示的频率就越高 我将一次输出一个图像,在刷新时我想显示另一个随机图像,考虑到图像的权重 有人对这件事有想法吗?在MS Access中可能也有这样做的方法,但我没有这个方法。此解决方案适用于任何数据库 <cfscript> /* equivalent to SELECT id,nam

我看着

在那里我找到了我需要的东西,但我需要它在Access db上

我正在使用ColdFusion构建我的页面,我想输出图像。我还想给图像赋予一个权重,这样数字越高的图像显示的频率就越高,权重越低的图像显示的频率就越高

我将一次输出一个图像,在刷新时我想显示另一个随机图像,考虑到图像的权重


有人对这件事有想法吗?

在MS Access中可能也有这样做的方法,但我没有这个方法。此解决方案适用于任何数据库

<cfscript>
/* equivalent to SELECT id,name,weight FROM images ORDER BY name */
images = queryNew("id,name,weight", "integer,varchar,integer");

for (i=1; i<=4; i++) {
    queryAddRow(images);
    querySetCell(images, "id", i);
    querySetCell(images, "name", "Image #i#");
}

querySetCell(images, "weight", 20, 1);
querySetCell(images, "weight", 30, 2);
querySetCell(images, "weight", 50, 3);
querySetCell(images, "weight", 100, 4);
</cfscript>

<cfset totalScore = 0>
<cfset scores = []>
<cfloop query="images">
    <cfset totalScore += weight>
    <cfset arrayAppend(scores, totalScore)>
</cfloop>

<cfset selectionScore = randRange(1,totalScore)>

<cfloop from="1" to="#arrayLen(scores)#" index="rowNumber">
    <cfset score = scores[rowNumber]>
    <cfif selectionScore LTE score>
        <cfbreak/>
    </cfif>
</cfloop>

<cfoutput>
#selectionScore#<br />
#images.id[rowNumber]#<br />
#images.name[rowNumber]#<br />
#images.weight[rowNumber]#
</cfoutput>

在MS Access中可能也有一种方法可以做到这一点,但我没有启动并运行它。此解决方案适用于任何数据库

<cfscript>
/* equivalent to SELECT id,name,weight FROM images ORDER BY name */
images = queryNew("id,name,weight", "integer,varchar,integer");

for (i=1; i<=4; i++) {
    queryAddRow(images);
    querySetCell(images, "id", i);
    querySetCell(images, "name", "Image #i#");
}

querySetCell(images, "weight", 20, 1);
querySetCell(images, "weight", 30, 2);
querySetCell(images, "weight", 50, 3);
querySetCell(images, "weight", 100, 4);
</cfscript>

<cfset totalScore = 0>
<cfset scores = []>
<cfloop query="images">
    <cfset totalScore += weight>
    <cfset arrayAppend(scores, totalScore)>
</cfloop>

<cfset selectionScore = randRange(1,totalScore)>

<cfloop from="1" to="#arrayLen(scores)#" index="rowNumber">
    <cfset score = scores[rowNumber]>
    <cfif selectionScore LTE score>
        <cfbreak/>
    </cfif>
</cfloop>

<cfoutput>
#selectionScore#<br />
#images.id[rowNumber]#<br />
#images.name[rowNumber]#<br />
#images.weight[rowNumber]#
</cfoutput>

这确实很有帮助,但我无法使select语句正常工作。我刚刚输入select语句作为select*from imagetable,还是将select语句放在images=后面,而不是images=querynew?或者我要删除脚本语句并插入一个法线来选择我的数据?我明白了!非常感谢你!!这确实很有帮助,但我无法使select语句正常工作。我刚刚输入select语句作为select*from imagetable,还是将select语句放在images=后面,而不是images=querynew?或者我要删除脚本语句并插入一个法线来选择我的数据?我明白了!非常感谢你!!