mysql - 我如何在更新记录时进行处理?

标签 mysql coldfusion

我正在使用两个更新查询,在第一个更新查询中,我设置了一条记录的 nav order = 0,然后在另一个查询中,我将 nav order 递减 1 以使 nav order 以正确的顺序排列,我该如何执行这两个操作此操作只有一个更新查询?任何帮助将不胜感激。

<cfif _q.is_nav_item EQ 1 AND arguments.is_nav_item EQ 0>
     <cfquery datasource="#getDSN()#">
        UPDATE content
        SET nav_order = 0
        WHERE id = <cfqueryparam value="#arguments.id#" cfsqltype="cf_sql_integer" />
        AND site__id = <cfqueryparam value="#arguments.site__id#" />
        ;   
        UPDATE content
        SET nav_order = nav_order - 1
            WHERE nav_order > <cfqueryparam value="#_q.nav_order#" cfsqltype="cf_sql_tinyint" />
        AND site__id = <cfqueryparam value="#arguments.site__id#" />
                    ;
        </cfquery>              
    </cfif>

最佳答案

您可以使用我认为与两个查询一样可读的 case 结构

<cfquery datasource="#getDSN()#">
UPDATE content
SET nav_order = case 
when id = <cfqueryparam value="#arguments.id#" cfsqltype="cf_sql_integer" /> then 0
when nav_order > <cfqueryparam value="#_q.nav_order#" cfsqltype="cf_sql_tinyint" /> 
then nav_order - 1
else nav_order 
end

WHERE site__id = <cfqueryparam value="#arguments.site__id#" />
</cfquery>

关于mysql - 我如何在更新记录时进行处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21240932/

相关文章:

javascript - PHP MySQL 表的日期范围过滤器

php - 在 PHP 中,如何根据某种分组将 mysql 查询的结果拆分为多个数组?

coldfusion - 有没有办法将数据库中的每一行的值放入数组中?

ColdFusion 太大而不能成为整数

web-services - 在 SOAP 请求中使用复杂对象

java - 什么是默认的 JDBC 字符编码

php - 在 PHP echo 中放置一个 onCLICK

php代码没有将我重定向到页面

javascript - 如何在我的 Coldfusion 页面中使用 Javascript?

mysql - 如何对字符串的最大值进行分组,同时保留字符串而不是其字符数?