我正在尝试更新数据库中的第一行。我使用Limit 1
仅更新第一行但没有发生任何事情。肯定有匹配的行,但数据库中没有任何变化。
以下是代码:
foreach ($player_fromsite as $match_player_in_game) {
//$querytwo = 'INSERT INTO `'.$tablename.'` '.' (`'.$match_player_in_game.'`) '.'VALUES'.'("' . 'yes' . '")';
$querytwo = 'UPDATE '.$tablename.' SET `'.$match_player_in_game.'` = "'.'yes'.'" WHERE `'.$match_player_in_game.'` = "'.'NULL'.'" LIMIT 1';
$querythree = 'UPDATE '.$tablename.' SET `'.$match_player_in_game.'` = "'.'yes'.'" WHERE `'.$match_player_in_game.'` = "'.'NULL'.'" LIMIT 1';
for($a=0;$a<11;$a++){
if($match_player_in_game == $home_players[$a]){
// Insert a row of information into the table "example"
mysql_query($querytwo) or die(mysql_error());
}else{
mysql_query($querythree) or die(mysql_error());
}
}
}
查询是否正确?
答案 0 :(得分:1)
在MySQL中使用IS NULL
与NULL
进行比较。
例如:“UPDATE table SET field = 'yes' WHERE field IS NULL
”
答案 1 :(得分:0)
NULL不是字符串,因此您不应该使用='NULL',除非您实际将其设置为该字符串值。改为使用IS NULL。
答案 2 :(得分:0)
您需要定义“第一行”。第一行基于自动增量id值?首先根据时间戳日期?你需要指定这个,因为MySQL没有“第一行”的概念。
例如,如果您在MySQL中执行类似的操作:
SELECT * FROM table LIMIT 1
您无法保证每次都能获得相同的记录。
您很可能需要在键列上指定ORDER BY
条件,因为没有它,您无法保证LIMIT 1
将应用于哪一行。我真的想不出一个人可能会在没有LIMIT
条款的情况下使用ORDER BY
的情况,因为这两者实际上是齐头并进的。
所以你的查询应该是这样的:
UPDATE table
SET field = 'yes'
WHERE field IS NULL
ORDER BY some_key_field ASC
LIMIT 1
请注意,即使此查询也不会每次更新同一行。它将更新具有指定字段的NULL值的第一条记录(由ORDER BY指定)。因此,如果您运行此查询10次,它将更改10个不同的记录(假设有许多记录具有NULL值)。