首页 > 解决方案 > 使用冷融合动态更新显示顺序

问题描述

我是一名自学成才的业余爱好者,为一家小型本地非营利组织做志愿者,我正在使用 Coldfusion 更新其网站管理部分。

其中一部分用于在前端按指定顺序显示志愿者。我在表格中添加了一个“显示”列,我在其中设置了志愿者将如何显示的订单号。(1 为第一,2 为第二,以此类推)

我希望能够在更新或添加记录时动态重新排列显示顺序。通常我会请一位高级程序员来做这件事,但这不在预算之内,所以我想我会试一试。

例子:

1 = 1

2 = 2

3 = 3

目前,如果我将 3 更改为 1,我会得到两个 1,而 3 会消失。(预期的)

1 = 1(以前是 3)

1 = 1

2 = 2

我希望更新将其下方的所有记录也移动到更新。

(如果我将 3 移到 1)

1 = 1(以前是 3)

2 = 2(以前是 1)

3 = 3(以前是 2)

或者

(如果我将 3 移动到 2)

1 = 1

2 = 2(以前是 3)

3 = 3(以前是 2)

目前我只是单独更新每条记录,但这显然并不理想,尤其是当志愿者名单增长到十几岁或更多时。

我已经搜索了几个小时来寻找有关如何执行此操作的指导,但不知道从哪里开始。任何帮助将不胜感激。

这是更新表单代码:

            <div class="form-group">
                <label for="Display">Display Order</label>
                <select name="display" class="form-control form-control-lg" required>
                    <option value="">Select Display Order</option>
                    <cfoutput query="GetBioDisplay"><option value="#GetBioDisplay.display#">#GetBioDisplay.display#</option></cfoutput>
                </select>
            </div>

这是更新查询:

            <cfquery name = "UpdateProfile" datasource="#dsn#">
                UPDATE DBO.PROFILE
                    SET firstname  =  '#form.firstname#', 
                    lastname       =  '#form.lastname#', 
                    title          =  '#form.title#',
                    email          =  '#form.email#',
                    display        =  '#form.display#', 
                    Picture        =  '#form.picture#',
                    profile        = '#form.profile#',
                    credentials    = '#form.credentials#' 
                    WHERE ID       =   #url.id#
            </cfquery>

这是我用于用户/前端的查询:

            <cfquery name="GetProfile" datasource="#request.dsn#">
                SELECT ID, FIRSTNAME, LASTNAME, TITLE, EMAIL, 
                    PICTURE, DISPLAY, PROFILE, CREDENTIALS
                        FROM DBO.PROFILE
                            ORDER BY DISPLAY
            </cfquery>

标签: sql-servercoldfusion

解决方案


添加第二个更新查询

update dbo.profile
set display = display + 1
where display >= <cfqueryparam CFSQLType = "cf_sql_integer" value = "#form.display#">
and id <> <cfqueryparam CFSQLType = "cf_sql_integer" value = "#url.id#">

您也应该在其他查询中使用查询参数。当前更新查询的编写方式会在 O'Malley 之类的名称上引发错误。

编辑从这里开始 为了让用户看到他们应该看到的,改变这个

     <cfoutput query="GetBioDisplay">
     <option value="#GetBioDisplay.display#">#GetBioDisplay.display#
     </option>
     </cfoutput>

对此

     <cfoutput query="GetBioDisplay">
     <option value="#GetBioDisplay.display#">#GetBioDisplay.rownumber#
     </option>
     </cfoutput>

这将显示用户编号,例如 1、2、3 等


推荐阅读