2017-02-13 94 views
1

有關於此的許多問題,但我找不到滿足我的情況的問題。PHP/MYSQL:在SELECT查詢中執行UPDATE

我想使用某些字段中的值/表的列設置第三場/列的值

換句話說是這樣的:

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不支持嵌套在select中的更新查詢。

請注意,我稍微簡化了這個。我實際上也是根據很多其他變量來計算得分 - 並且可能會加入一些表格以獲得其他輸入 - 但這是基本原則。

感謝您的任何建議

+0

而不是更新嵌套在選擇,你會不會有一個選擇嵌套更新查詢的內部? – camdixon

+0

這可能是做到這一點的方法。但它必須通過ID循環,因爲我需要爲所有記錄執行此操作。 – zztop

+0

爲什麼這個標籤爲iOS? – 2017-02-13 21:34:45

回答

0

首先,正如前面的評論員說,你應該使用PDO,而不是mysql_ *查詢。 閱讀關於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的選擇這個答案,因爲它會更容易在php中進行計算(因爲我在計算調整分數時添加了更多的邏輯)比在MYSQL中更容易。但這兩種方法似乎都有效。 – zztop

2

您可以運行:

所有的
UPDATE `races` 
SET `adjustedscore` = `difficulty` * `score` 
WHERE `athleteid` IN (1, 2, 3, ...) 
相關問題