Php SQL使用不同的值更新多行,而不指定唯一键

Php SQL使用不同的值更新多行,而不指定唯一键,php,sql,sql-update,Php,Sql,Sql Update,我需要帮助构建一个SQL查询来搜索用户id(假设用户id=5),但是这个用户id有多个行条目,但是我需要以不同的方式更新每一行 我有一个数组,其中包含要分配给该用户id的数据。以下是一个表示例: id user_id amount txn_id 1 5 10 foo_unique 2 5 5 bar_unique 3 7 15 xyz_unique 4

我需要帮助构建一个SQL查询来搜索用户id(假设用户id=5),但是这个用户id有多个行条目,但是我需要以不同的方式更新每一行

我有一个数组,其中包含要分配给该用户id的数据。以下是一个表示例:

id    user_id    amount    txn_id
1     5          10        foo_unique
2     5          5         bar_unique
3     7          15        xyz_unique
4     5          10        123_unique
我的数组将如下所示:

Array (
    [0] => 14
    [1] => 6
    [2] => 9
)
id    user_id    amount    txn_id
1     5          14        foo_unique
2     5          5         bar_unique
3     7          6         xyz_unique
4     5          9         123_unique
正如您所看到的,我有三个数组值和三行user_id 5,现在我想将该数组的每个值添加到相应的user_id(5)中。请注意,我有一个名为
txn\u id

更新表后,它将如下所示:

Array (
    [0] => 14
    [1] => 6
    [2] => 9
)
id    user_id    amount    txn_id
1     5          14        foo_unique
2     5          5         bar_unique
3     7          6         xyz_unique
4     5          9         123_unique
有什么办法可以做到这一点吗

谢谢


注意:我不能在这个问题上使用SQL CASE。

您可以使用以下查询:

UPDATE MyTable
SET
    amount = 
        CASE id 
            WHEN 1 THEN 14
            WHEN 2 THEN 6
            WHEN 3 THEN 9
            ELSE amount -- just in case user_id 5 has records not covered above.
        END
WHERE 
    user_id = 5

如果您想用一个值更新一行,您必须能够为该行设置一个唯一条件


如果不添加一些额外的字段或条件来唯一标识一行,那么您就不走运了。

问题是,数组中没有任何内容表明哪个数组条目属于哪个数据库行。如果您只想依赖于(数组索引和数据库
id
s的)顺序,则必须
首先为用户选择所有行,然后一次循环并更新一行。在PHP上类似于以下内容(和):


(上面的代码假设数组上的值的数量与user_id=5的数据库行的数量相匹配。)

看看这个问题,您只需要使用SQL语句

首先是创建两个表:

CREATE TABLE users 
  user_id int(11) PRIMARY KEY NOT NULL,
  username varchar(25),
) Engine = InnoDB;

CREATE table userbalances (
  balance_id int(11) PRIMARY KEY NOT NULL,
  user_id int(11),
  amount decimal(10,2),
  CONSTRAINT userid_fk FOREIGN KEY userid_fk(user_id) REFERENCES users(userid)
) Engine = InnoDB;
然后,在插入(ed)表中的所有用户和用户余额后,您需要做的就是创建一个更新语句来更新金额:

UPDATE userbalances SET amount=? WHERE user_id=? AND balanceid=?
更新应处于循环中。您应该使用mysql\u query()函数来使用分配的数组更新它

注意: useridbalanceid都应该在UPDATE语句的WHERE子句中,因为您在userbalances表中有多笔交易。否则,它将更改该用户所有事务的所有余额

问题更新:
如果您没有在这个问题上使用任何SQL案例,那么您的问题就是PHP。您需要了解更新(ing)的功能-更新金额。只要您的表都已预填充。程序上可能有一个函数用于更新它。

hm,更新“随机”行真的好吗?为什么目标行没有键?为什么不能使用SQL CASE?这将有助于我们理解其局限性。是的。我正在编写的源代码从来没有包含任何案例查询,我不能是第一个使用它的人。“我不能是第一个使用它的人。”你不可能是认真的@很奇怪,不是吗?但是是的,这不取决于我。因为我不是那个剧本的主要作者,所以我不能第一个给它添加新东西。也许他们没有添加它是有原因的。。。不是每个DBMS都支持这样的查询。@希望有帮助,我认为重点是在这样的场景中使用用例,这只是一个例子,但即使是用例也不是最佳解决方案-您需要显式的ID值,这需要子查询来检索。当您说
不是最佳解决方案时,您是在谈论性能吗?如果数组上的索引对应于
user\u id
为5的行的
id
列的值,则此update语句提供了所需的更新效果。有一个名为
txn\u id
的唯一列,其中包含某种键。该列不在您的问题中?不知道它很重要。更新。是否可以解释用例?我不敢相信,如果找到解决方案,这不会造成数据混乱?如果您不知道应该更新哪些行,为什么要更新行。好的,这样您就可以唯一地标识一行,您希望数组值放在哪里。。值14可以转到用户_id 5和foo_unique,还是可以转到123_unique的bar_unique?