我正在使用两个更新查询,在第一个更新查询中,我设置了一条记录的 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/