MYSQL需要帮助使用php从每个“用户”中提取数据

时间:2013-03-11 14:55:29

标签: php mysql database

这就是我所拥有的。此代码从所有用户获取数据,并从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天)

感谢任何帮助,我希望这个问题很容易理解。

为了澄清,我想更新每个领域。 我只是不希望从第一个结果中复制更新。

感谢所有答案,这给了我很多帮助。

7 个答案:

答案 0 :(得分:3)

为什么不运行UPDATE users SET user_days = user_days-1 WHERE id=XXXXX?然后选择整个事情?

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您应该将哪条记录指向更新

mysqli_query($con,"UPDATE users SET user_days=$minusone WHERE id=XXXXX");

答案 3 :(得分: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'];
}

答案 4 :(得分:0)

使用以下查询:

mysqli_query($con,"UPDATE users SET user_days=$minusone WHERE user_ID = '".$row['user_ID']."'");

答案 5 :(得分:0)

您正在更新具有相同$minusone值的所有用户。您需要在update语句中使用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替换为所有user_days

答案 6 :(得分:0)

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

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

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

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

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