【问题标题】:Access db: select one row randomly, but taking into account a weight访问db:随机选择一行,但要考虑权重
【发布时间】:2011-09-03 08:34:13
【问题描述】:

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

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

我正在使用 ColdFusion 构建我的页面,并且我想输出图像。我还想给图片一个“权重”,所以数字较大的图片将比权重较小的图片更频繁地显示。

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

有人对这件事有想法吗?

【问题讨论】:

    标签: sql ms-access random coldfusion


    【解决方案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>
    

    【讨论】:

    • 这确实有很大帮助,但我没有让 select 语句起作用。我刚刚将 select 语句输入为 select * from imagetable,还是将 select 语句放在“images =”而不是 images = querynew(....)" 之后?
    • 还是我删除脚本语句并插入一个普通的 来选择我的数据?
    • 我明白了!非常感谢!!
    猜你喜欢
    • 2010-11-26
    • 2011-01-09
    • 2013-05-23
    • 1970-01-01
    • 2011-04-29
    • 2018-07-27
    • 2012-10-22
    • 2014-04-27
    • 2020-07-26
    相关资源
    最近更新 更多