1

这就是我所拥有的。此代码从所有用户中获取数据并从 user_days 中减去 1,然后更新每个用户的 user_days 行。

$result = mysqli_query($con,"SELECT * FROM users");

while($row = mysqli_fetch_array($result))
  {
  $minusone = $row['user_days']-1;
  mysqli_query($con,"UPDATE users SET user_days=$minusone");
  echo "<br />";
  echo $row['user_days'];
  }

我遇到的问题是:不是从每个用户中减去 1 并更新每个用户字段,而是使用第一个用户的值更新每个用户的字段。

示例:在更新用户 1 有 30 天之前,用户 2 有 60 天

更新后用户 1 有 29 天,用户 2 有 29 天(而不是 59 天)

任何帮助表示赞赏,我希望这个问题很容易理解。

澄清一下,我确实想更新每个字段。我只是不希望从第一个结果中复制更新。

谢谢大家的回答,这给了我很多帮助。

4

7 回答 7

3

你为什么不直接跑UPDATE users SET user_days = user_days-1 WHERE id=XXXXX?然后全选?

于 2013-03-11T15:00:01.810 回答
0

正如其他答案已经指出的那样,最好的方法是用一行替换整个代码块。

mysqli_query($con, "UPDATE users SET user_days=user_days-1");

然后您可以根据需要选择并显示信息。

在不确切知道您的用途的情况user_days下,我认为可能有更好的方法来解决您正在尝试做的事情。我假设这是某种订阅服务,并且此代码将每天运行一次,以减少允许他们访问服务的天数。

更好的方法是subscriptionExpires在您的数据库中有一个字段,该字段将保存一个日期时间值。使用您的方法,如果运行此操作的作业失败,每个用户都将获得额外的一天。如果网络蜘蛛或用户找到您的脚本,您的用户帐户将提前到期怎么办。如果您使用帐户到期的实际日期,则无法猜测当前值是否正确。

于 2013-03-11T15:10:03.363 回答
0

您应该将哪条记录指向 UPDATE

mysqli_query($con,"UPDATE users SET user_days=$minusone WHERE id=XXXXX");
于 2013-03-11T14:59:32.227 回答
0

问题出在UPDATE声明上。如果没有WHERE子句,它将将该SET子句应用于数据库中的每一行。假设您在 users 表中有一个唯一的 id 列id,您可以像这样修改您的代码:

while($row = mysqli_fetch_array($result))
{
  $minusone = $row['user_days']-1;
  $user_id = $row['id'];
  mysqli_query($con,"UPDATE users SET user_days=$minusone WHERE id=$user_id");
  echo "<br />";
  echo $row['user_days'];
}
于 2013-03-11T14:59:48.503 回答
0

更新记录时,需要指定感兴趣记录的用户 ID,否则当前查询会更新表中的所有行。

于 2013-03-11T14:58:20.423 回答
0

使用以下查询:

mysqli_query($con,"UPDATE users SET user_days=$minusone WHERE user_ID = '".$row['user_ID']."'");
于 2013-03-11T15:00:26.793 回答
0

您正在使用相同的$minusone值更新所有用户。您需要WHERE在更新语句中添加一个子句,如下所示:

$result = mysqli_query($con,"SELECT * FROM users");

while($row = mysqli_fetch_array($result))
  {
  $minusone = $row['user_days']-1;
  $id_user = $row['id_user'];
  mysqli_query($con,"UPDATE users SET user_days=$minusone WHERE id_user = $id_user");
  echo "<br />";
  echo $row['user_days'];
  }

做你想做的另一种方法是:

...
$result = mysqli_query($con,"UPDATE users SET user_days = user_days - 1");
...

这假设您想将 1 减去 all user_days

于 2013-03-11T15:01:37.613 回答