【问题标题】:how can i cases while updating records?更新记录时如何处理?
【发布时间】:2014-01-21 02:56:41
【问题描述】:

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

【问题讨论】:

  • 为什么要使用一个更新查询来做这两个?您当前的代码有效,并且非常易读。只需使用事务。
  • @Henry - 绝对可以正常工作......但我的 TL 希望它在一个查询中完成......我不知道是什么让他想到它。
  • 如果你要做出这样的改变,应该有一个好的理由。它似乎不太可能产生任何性能优势,更重要的是,查询将更难理解。那么这里的感知好处是什么?
  • 你的 TL??温柔的情人?小骆驼?糟糕的律师?
  • @DanBracuk 团队负责人?我猜。

标签: mysql coldfusion


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    试试这个:

    <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 的观点,即两个现有的单独查询更可取。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多