1

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

我有一个数组,其中包含要分配给该 user_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
)

如您所见,user_id 5 有三个数组值和三行,现在我想将该数组的每个值添加到相应的 user_id (5)。请注意,我有一个名为 UNIQUE 的列txn_id

更新表格后,它看起来像这样:

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

有什么想法我能做到这一点吗?

谢谢。

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

4

4 回答 4

2

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

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

于 2012-09-25T19:29:20.170 回答
0

问题是,您的阵列上没有任何内容表明哪个阵列条目属于哪个数据库行。如果您只想依赖(数组索引和数据库ids 的)顺序,则必须SELECT首先为用户处理所有行,然后一次循环并更新一行。在 PHP(和PDO)上是这样的:

$values = array(14, 6, 9);
$dbh = new PDO('mysql:host=localhost;dbname=yourdbname', 'username', 'password');
$selectQuery = 'SELECT id FROM yourtable WHERE user_id = 5 ORDER BY id';
foreach($dbh->query($selectQuery) as $row) {
    $id = $row['id'];
    $sth = $dbh->prepare("UPDATE yourtable SET amount = :val WHERE id = :id");
    $sth->execute(array(
        'val' => array_unshift($values),
        'id' => $id
    ));
}

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

于 2012-09-25T19:47:27.573 回答
0

您可以使用以下查询:

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
于 2012-09-25T19:26:33.133 回答
0

看问题你只需要 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 语句来更新金额:

UPDATE userbalances SET amount=? WHERE user_id=? AND balanceid=?

更新应该是循环的。并且您应该使用mysql_query()函数使用您拥有的分配数组来更新它。

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

问题更新: 如果你在这个问题上没有使用任何 SQL 案例,那么你的问题只是 PHP。您需要找出 UPDATE(ing) 的功能是什么 - 更新金额。只要您的表都已预先填充。您用来更新它的程序上可能有一个功能。

于 2012-09-25T20:14:04.590 回答