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

时间:2011-05-27 11:52:18

标签: sql ms-access random coldfusion

我看了SQL : select one row randomly, but taking into account a weight

并且我找到了我需要的东西,但我需要在Access数据库上。

我正在使用ColdFusion构建我的页面,我想输出图像。我还想对图像赋予“权重”,因此具有较高数字的图像将比具有较低数量的图像更频繁地显示。

我将一次输出1张图像,在刷新时我想显示另一张图像(随机,考虑“重量”)图像。

有人对此事有所了解吗?

1 个答案:

答案 0 :(得分:1)

在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>