如何更新记录时的情况?

时间:2014-01-20 17:56:34

标签: mysql coldfusion

我正在使用两个更新查询,其中在第一次更新查询中我设置一个记录的nav order = 0然后在另一个查询中我将导航顺序递减1以使导航顺序正确顺序,我怎样才能执行两者这个操作只有一个更新查询?任何帮助将不胜感激。

<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>

2 个答案:

答案 0 :(得分:3)

您可以使用我认为与两个查询一样可读的案例构造

<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>

答案 1 :(得分:0)

试试这个:

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

为了记录,我同意@Henry的观点,即两个现有的单独查询更可取。