我正在创建一个小型游戏作为私人项目。用户可能会死并进入医院我正在寻找一种简单的方法来在一个查询中更新他们的信息,但它涉及用行中的另一个单元更新行的一个单元格。我到目前为止这样做:
// UPDATE USERS WHO SHOULD NOT BE IN HOSPITAL
$q = $dbc -> prepare("SELECT id, maxLifeforce FROM accounts WHERE hospitalTime < NOW() AND inHospital = 1");
$q -> execute();
while ($account = $q -> fetch(PDO::FETCH_ASSOC)) {
$q = $dbc -> prepare("UPDATE accounts SET inHospital = 0, lifeforce = ? WHERE id = ?");
$q -> execute(array($account['id'], $account['maxLifeforce']));
}
这可以按照我的意愿运行,但是如果有意义的话,在将lifeforce
设置为该行maxlifeforce
时,无法更新符合第一个语句条件的所有行。我听说在while循环中使用查询并不是一个好习惯。
答案 0 :(得分:2)
我想你想要这样的东西:
UPDATE accounts
SET inHospital = 0,
lifeforce = maxLifeforce
WHERE hospitalTime < NOW()
AND inHospital = 1;
由于您希望从同一个表中提取数据以更新同一行中的其他列,因此就像说SET lifeforce = maxLifeforce
一样简单。