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の日数は(59日ではなく)29日です

どんな助けでもありがたいです、そして私はこの質問が理解しやすいことを望みます。

明確にするために、私はすべてのフィールドを更新したいと思います。最初の結果から更新を複製したくないだけです。

すべての回答に感謝します、これは私に多くの助けを与えてくれました。

4

7 に答える 7

3

走ってみませんUPDATE users SET user_days = user_days-1 WHERE id=XXXXXか?そして、全部を選択しますか?

于 2013-03-11T15:00:01.810 に答える
0

問題はUPDATEステートメントにあります。句がないと、データベースのすべての行に句WHEREが適用されます。SETusersテーブルに名前が付けられた一意の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

次のクエリを使用します。

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

レコードを更新するときは、対象のレコードのユーザーIDを指定する必要があります。そうしないと、現在のクエリでテーブル内のすべての行が更新されます。

于 2013-03-11T14:58:20.423 に答える
0

他の回答ですでに指摘されているように、これを行う最善の方法は、コード ブロック全体を 1 行に置き換えることです。

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

次に、必要に応じて情報を選択して表示できます。

あなたが何user_daysのために使っているのか正確にわからなくても、あなたがやろうとしていることへのより良いアプローチがあるかもしれないと私は考えています. これはある種のサブスクリプション サービスであり、このコードは 1 日に 1 回実行され、サービスへのアクセスを許可する日数を減らします。

より良いアプローチはsubscriptionExpires、日時の値を保持するフィールドをデータベースに作成することです。あなたのアプローチを使用すると、これを実行するジョブが失敗した場合、すべてのユーザーに余分な日が与えられます。Web スパイダーまたはユーザーがスクリプトを見つけた場合、ユーザー アカウントは早期に期限切れになります。アカウントの有効期限が切れる実際の日付を使用する場合、現在の値が正しいかどうかは推測できません。

于 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

$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 に答える