我需要帮助构建一个搜索user_id的SQL查询(假设user_id = 5),但是这个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)。请注意,我有一个名为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
我是如何实现这一目标的?
感谢。
P.S:我不能在这个问题上使用SQL CASE。
答案 0 :(得分:2)
如果您想使用某个值更新一个行,则必须能够为该行设置唯一条件。< / p>
如果不添加额外的字段或条件来唯一标识一行,那你就不走运了。
答案 1 :(得分: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
答案 2 :(得分:0)
问题是,您的阵列上没有任何内容表明哪个数组条目属于哪个数据库行。如果你只想依赖订单(数组索引和数据库id
),你必须首先为用户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
的数据库行数相匹配。)
答案 3 :(得分: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;
然后,在INSERT(ed)表中的所有用户和用户权限之后,您需要做的只是创建UPDATE语句来更新金额:
UPDATE userbalances SET amount=? WHERE user_id=? AND balanceid=?
更新应该循环。您应该使用 mysql_query()函数使用您拥有的已分配数组更新它。
注意:强> 用户ID 和 balanceid 都应位于UPDATE语句的WHERE子句中,因为 userbalances 中有多个事务表。否则,它将改变该用户的所有交易的所有余额。
问题更新: 如果您不对此问题使用任何SQL案例,那么您的问题只是PHP。您需要找出UPDATE(ing)的功能 - 更新金额。只要你的桌子全部预先填充。用于更新它的程序可能有一个函数。