问题描述
|
我看着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>