php - 检查单个 mysql 表行并仅对它们应用一个函数

标签 php mysql

我有一个包含不同用户的表(按 ID 不同)http://imgur.com/a/CXuJX

每次我触发一个 php 文件运行以处理下一个回合时,我都有这部分代码负责更新该特定表:

$get_turn_update = mysqli_query($connect, "SELECT * FROM turn_update") or die (mysqli_error($connect));
while ($user_turn_update = mysqli_fetch_assoc($get_turn_update)) {
    if ($user_turn_update['residenceTurns'] > 0) {
        $residencesBuilt = ceil($user_turn_update['residence'] / $user_turn_update['residenceTurns']);
        $residences_turn_update = mysqli_query($connect, "UPDATE turn_update SET residenceTurns = residenceTurns - 1") or die (mysqli_error($connect));
        $residences_update = mysqli_query($connect, "UPDATE turn_update SET residence = residence - '".$residencesBuilt."'") or die (mysqli_error($connect));
        $residences_built_update = mysqli_query($connect, "UPDATE buildings SET residence = residence + '".$residencesBuilt."'") or die (mysqli_error($connect));
    }
}

基本上,'residence' 列是将在剩余回合中 build 的住宅数量 - 'residenceTurns' 列。

问题是,例如,当 id 为 3 的用户“ build ”了他的住宅,并且 residenceTurns 减 1 时,其他用户(在本例中为 id 4),即使他们没有任何住宅在建筑中获得相同数量的转弯 (-1) 和住宅数量(取决于数量)。

例如,如果我们从这样的参数开始:

  • 编号 |住所 |住所转
  • 3 | 10 | 2
  • 4 | 0 | 0

1 回合内我们将拥有

  • 编号 |住所 |住所转
  • 3 | 5 | 1
  • 4 | -5 | -1

2 回合后我们将拥有

  • 编号 |住所 |住所转
  • 3 | 0 | 0
  • 4 | -10 | -2

我需要的是,如果一行(一个用户)有一定数量的住宅建筑,它只影响他并且为每个用户单独处理。

谢谢

最佳答案

您没有在更新语句中使用 WHERE 子句,因此,您每次都在更新整个表。通过提供 WHERE 子句将您的查询限制在特定的住所,例如:

UPDATE residence SET turns = turns - 1 WHERE id = residence['id']

我在手机上,这是伪代码,但应该能帮到你。

关于php - 检查单个 mysql 表行并仅对它们应用一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41884790/

相关文章:

php - mysqli bind_param 中的NULL 是什么类型?

php - 从数据库中查找上周报告

当我在 Docker 容器中运行 MySQL 时,mysqld 也会运行

Windows 7 上的 Python/Django 环境

php - 是否可以在 php 中实例化一个函数?

php - 将密码与从数据库查询的哈希值进行比较?

php - "Read More"按钮在 PHP、MySQL CMS 中停止工作

php - 如何在一个 mysql_query 中执行多个 SQL 语句?

mysql - saas 应用程序的最佳数据库模型(每个帐户 1 db VS 每个人 1 db)

mysql - MYSQL 中 CASE 内 CASE 的 SUM/COUNT