【问题标题】:Under standing Update Queries, and how many sets one query can have了解常规更新查询,以及一个查询可以有多少组
【发布时间】:2019-08-16 06:15:58
【问题描述】:

那么愚蠢的问题,我正在尝试执行这个非常复杂的 UPDATE 查询。从 UPDATE 语法的设置方式来看;有可能吗?在查询中有多个 SET 关键字是否明智?

这是一个表单,它包含从数据库中填充的二维信息数组。数组的每一行相当于数据库中的一条记录。提交时,查询应该更新表值。

<form>
<p>Item 1</p><input name='itemID1'><input name='ItemDescr1'><input name='itemCost1'>
<p>Item 2</p><input name='itemID2'><input name='ItemDescr2'><input name='itemCost2'>
<p>Item 3</p><input name='itemID3'><input name='ItemDescr3'><input name='itemCost3'>
<input type='submit'>
</form>

这是我尝试过的一种新型查询,我对 SQL 处理此类查询的能力感到迷茫。但这就是我想象的查询结构

UPDATE table SET (col1 = "value1", col2= "value2",...) WHERE idcol = "ID1", 
SET (col1 = "value3", col2= "value4",...) WHERE idcol = "ID2"

我真的不知道这是否可行,或者是否应该这样做。如果有业内人士遇到过这个问题,请帮忙。

【问题讨论】:

  • 是不是因为您觉得一次性运行它可以让您在更新失败时保持一致性?您是否已经研究过事务,以便您可以发送多个更新命令然后最后提交?
  • 感谢您的评论,我想尝试在一个更新查询中获取它的原因,或者至少尝试设置这样的循环和查询结构,是因为在我的实际应用程序中,用户可以更好地控制表单长度以及他们想要添加的记录数。因此,为此我希望查询创建灵活。
  • 但是话又说回来,事务可能是一种更有用的方法,至少您知道在将更改提交到数据库之前所有这些方法都有效

标签: mysql


【解决方案1】:

您最好为每个单独编写单独的 UPDATE 查询;使用您所设想的语法,您已经只是一个“更新表”了......但是如果您处于查询数量有限的奇怪情况之一,您可以这样做(除非有情有可原的情况,否则我不会建议这样做,因为它会使查询变得不必要地复杂,而且实际上可能更慢)。

UPDATE table 
SET col1 = CASE idcol WHEN "ID1" THEN "value1" WHEN "ID2" THEN "value3" ..... ELSE col1 END
    , col2 = CASE idcol WHEN "ID1" THEN "value2" WHEN "ID2" THEN "value4" ..... ELSE col2 END
WHERE idCol IN ("ID1", "ID2", ....)
;

除非您忘记了 WHERE 子句,或者更改了 WHERE 的 IN 列表而没有相应地更新所有这些 CASE 表达式,否则 ELSE 不是必需的;在这种情况下,它将防止查询无意中将一堆数据归零。

【讨论】:

  • 感谢您的回答。因此,如果我正确理解这一点;我会遍历每一列,并根据我试图与之关联的 ID 分配每个值?
  • 所以如果我在 php 中循环它会是什么样子。 $query="更新表集"; if ($_POST[ID~] != ""){ $query .= " col1 = Case idcol WHEN ".$_POST['ID1']." THEN "$_POST['val1']" When ... . ……”; } 我有这个权利吗?
  • 我一般不擅长 php 或 web 的东西,例如我不确定 ~ 是否有什么特别之处,但基本上你需要用你的替换所有引用的位数据。
  • 我仍然倾向于 icepickle 的建议,即开始一个事务,遍历多个更新,然后提交它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多