访问数据库:随机选择一行,但要考虑权重

问题描述

| 我看着sql随机选择一行,但要考虑到权重 在那里我找到了我需要的东西,但是我在Access数据库上需要它。 我正在使用ColdFusion构建页面,我想输出图像。我还想给图像赋予一个“权重”,因此编号较高的图像将比重量较小的图像更频繁地显示。 我将一次输出1张图像,并且在刷新时我想显示另一张图像(考虑“重量”,是随机的)。 有人对此事有想法吗?     

解决方法

        MS Access中也可能有一种方法可以执行此操作,但是我没有使其运行。该解决方案可与任何数据库一起使用。
<cfscript>
/* equivalent to SELECT id,name,weight FROM images ORDER BY name */
images = queryNew(\"id,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,30,2);
querySetCell(images,50,3);
querySetCell(images,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>