由于查询量大,动态下拉列表混乱

Posted

技术标签:

【中文标题】由于查询量大,动态下拉列表混乱【英文标题】:Dynamic dropdown list messes up due to large query 【发布时间】:2018-06-28 18:47:12 【问题描述】:

我的下拉字段存在问题,该字段由大型查询动态填充。由于当用户访问表单时查询返回一个非常大的值,所以表单会冻结。就像它在等待下拉列表被填充一样。与此同时,所有表单格式都被弄乱了,下拉菜单消失了。当我将查询限制为较少的记录时,一切正常。此查询返回超过 26K 条记录。 在 ColdFusion 中是否有解决此问题的方法?我不相信 ColdFusion 不能处理这种情况。我正在使用 ColdFusion2016 和后端 Oracle 11g。

这是查询和下拉列表:

    <cfquery name="xCodes" datasource="#application.DSN#">
     select xcode, desc, xcode || ' ---- ' || desc as FullDesc
     from x_header
     <cfif IsDefined("url.codes")>
        <cfif url.codes EQ "y">
         order by xcode
        <cfelse>
         order by desc
        </cfif>
     </cfif>
    </cfquery>

        <select name="xcode" id="xcode" class="RegSelect" required="TRUE">
          <option value="">--- Select a code ---</option>
             <cfoutput query="xCodes">
             <option value="#xcode#">#FullDesc#</option>
             </cfoutput>
        </select>

【问题讨论】:

查询返回的值是否可能对生成的 html 有问题,例如未编码的大于/小于或 & 符号? (不过,26k 项似乎需要滚动浏览很多......) 这似乎不存在价值问题,因为如果我等待足够长的时间,下拉菜单最终会出现,但用户必须等待太久,尤其是在他们的界面上使用变形表单。要滚动的项目很多,但这是供管理员使用的。我们办公室有超过六名管理员需要访问这些值。 同意,26K 项方式太多,无法滚动(实际上有这么多项目是必需的还是可以过滤掉?)。在 Oracle 中,我相信您可以使用 ROWNUM (oracle.com/technetwork/issue-archive/2006/06-sep/…) 对查询进行分页以返回您想要的内容,然后循环您需要的结果。 AJAX 可能是您最好的选择。 您可能还想使用 Select2。 ***.com/questions/32533757/… 【参考方案1】:

我同意 Alex Poole 的观点,即选择中的 26K 项目相当大,在我看来,您的浏览器的渲染引擎正在努力构建它,这就是为什么您的格式在最终构建之前是不稳定的。

这里有几个建议。

    是否可以将值分解为逻辑组并使用多项选择?因此,您的第一个选择将是逻辑组值。一旦用户选择了他们的选择,下一个选择将只包含该逻辑组内的值。如果不存在这样的逻辑分组,那么您可以自己编组。例如,您可以使用字母表中的 26 个字母作为逻辑组,那么您的子选择将平均包含 1000 个选项。

    另一个建议是使用 jQuery 自动完成并通过 ajax 调用填充您的值。我已经使用 ColdFusion 和 Oracle 做了几次,效果很好。

【讨论】:

这是正确的答案。这不是 ColdFusion 问题。下拉列表中的 26k 选项是不可用且荒谬的。正如建议的那样,更好的方法是使用 AJAX 搜索下拉菜单。 谢谢!我正在考虑使用逻辑组,但我不确定 @user3779216 没问题。如果您正在使用此解决方案,请标记为已接受的答案。

以上是关于由于查询量大,动态下拉列表混乱的主要内容,如果未能解决你的问题,请参考以下文章

基于其他下拉列表的 ajax 和 jQuery 动态下拉列表(来自数据库的数据)

从下拉列表中显示数据php

来自 PHP/MySQL 的 Ajax 加载生成带有变量传递的 Bootstrap 下拉列表

Select2 - Ajax 数据 - 根据查询填充下拉列表

在 Laravel 中刷新页面后保留下拉列表中的动态值

我有表格,在里面我动态生成下拉列表,我想获取每个下拉列表的值