2017-02-13 156 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, ...) 
相关问题