【问题标题】:Update Multiple Rows mysql更新多行mysql
【发布时间】:2015-03-12 20:11:14
【问题描述】:

我有一张桌子tbl

|id|points|
 1   15
 2   35
 3   445
 4   42

现在如果我有一个类似的数组

array (2=>10,3=>825,4=>48)

我想更改点,使tbl 看起来像这样。

|id|points|
 1   15
 2   10
 3   825
 4   48

我可以使用多个查询来更改值,但任何人都可以通过一个查询来说明如何做到这一点吗?

【问题讨论】:

  • 更改值的规则是什么?
  • @frlan 提出了正确的问题,但我也可能会问,您为什么觉得需要使用单个语句?如果您担心的话,您可以在同一事务中包含多个语句。
  • "如何用一个查询做到这一点?" .. 使用 case 语句。
  • 规则是我有一个array (1=>05,2=>10,3=>825,4=>48),其中keyid,值是points@frlan

标签: mysql sql sql-update on-duplicate-key


【解决方案1】:

使用 case 语句...

Update tbl
set points = CASE 
  WHEN ID = 1 then 05 
  when ID = 2 then 10 
  when ID = 3 then 825 
  when ID = 4 then 48 END

工作小提琴:http://sqlfiddle.com/#!9/6cb0d/1/0

【讨论】:

  • 但是如果我的数组中有数千个ID,那么它就没有帮助了!
  • 你可能会遇到缓冲区溢出;但这不会是 SQL 执行的问题。另一种方法是将数组写入临时表并基于它进行更新。此外,如果任何一点相同,您可以使用ID IN (1,2) then point...
【解决方案2】:

首先,您必须将您的阵列上传到临时服务器。桌子。让我们称之为 new_list,而不是你可以做类似的事情

UPDATE table as t
SET points = (SELECT points FROM new_list WHERE t.id = new_list.id)

说实话,我不知道这是否在 MySQL 上运行,所以您可能需要自己考虑一下。

看起来数据在 PHP 数组中,我想可能会呈现类似

UPDATE table SET points = $points WHERE id = $id1
UPDATE table SET points = $points WHERE id = $id2
UPDATE table SET points = $points WHERE id = $id3

【讨论】:

  • 但是new_list 不存在!我有一个 php 数组,它存储点和相应的 id
  • 来吧。为什么你没有把它放在你的问题中
  • 我已经把@frlan 刷新了你的页面!
  • 没有提到该数组在某些脚本语言中使用。
  • 我试过这个,但它在处理数千个$id 时是否经过优化? @frlan
猜你喜欢
  • 2023-04-02
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
相关资源
最近更新 更多