2017-02-13 51 views
1

これについては多くの質問がありますが、私の状況をかなり満たしているものは見つかりません。PHP/MYSQL:SELECTクエリ内でUPDATEを実行してください

私は言い換えるような何か3番目のフィールド/列

の値を設定するために、テーブルの一部のフィールド/列の値を使用したい:しかし、

table races 
athleteid|difficulty|score|adjustedscore 

$sqlSelect = "SELECT athleteid,difficulty,score FROM races"; 
$res = mysql_query($sqlSelect) or die(mysql_error()); 
while ($row = mysql_fetch_array($res)){ 

$adjustedscore=difficulty*score; 

$sqlupdate = "UPDATE race, set adjustedscore = '$adjustedscore' WHERE athletes = 'athletes'"; 
$resupdate = mysql_query($sqlupdate); 

} 

私の理解を、 MYSQLは選択されたものにネストされた更新クエリをサポートしていないということです。

注:これを少し簡略化しました。私は実際に他の多くの変数に基づいてスコアを計算しています - そして、他の入力を得るためにいくつかのテーブルに参加するかもしれませんが、これは基本的なプリンシパルです。あなたが実行することができます任意の提案

+0

を更新使い更新します更新クエリの内部?それを行う方法かもしれない – camdixon

+0

。しかし、すべてのレコードでこれを行う必要があるので、IDを介してループする必要があります。 – zztop

+0

なぜこのタグはiOSですか? –

答えて

0

まず、あなたの代わりにmysql_ *クエリのPDOを使用する必要があります。 PDO hereについて読む
SELECTクエリでDBからデータを取得すると、配列が取得されます。 PDO documentationのfetchAll()を使用することをお勧めします。
あなたの目標は、このデータを変数に保存することです。 $rowと同じように
その後、あなたは、各配列をループする必要がありますし、取得データ:
foreach($row as $r) { //We do this to access each of ours athlete data $adjustedscore= $row[$r]["difficulty"]* $row[$r]["score"]; //Next row is not clear for me... $query = "UPDATE race SET adjustedscore = '$adjustedscore' WHERE athletes = 'athletes'";
をそして、我々はあなたがネストされた選択を持っていないでしょうPDOではなく、選択にネストされ、更新のprepared statement
$stmt = $dbh->prepare($query); $stmt->execute(); }

+0

この回答をJiri'sで選択すると、PHPで計算するのが簡単になります(調整されたスコアの計算にロジックを追加するため)がMYSQLよりも簡単です。しかし、両方のアプローチが有効であるように見える。 – zztop

2

ため

ありがとう:以前のコメンテーターが言ったように、すべての

UPDATE `races` 
SET `adjustedscore` = `difficulty` * `score` 
WHERE `athleteid` IN (1, 2, 3, ...) 
関連する問題