更新第一行mysql php

时间:2014-01-08 22:45:14

标签: php mysql sql

我正在尝试更新数据库中的第一行。我使用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());
       }
    }
}

查询是否正确?

3 个答案:

答案 0 :(得分:1)

在MySQL中使用IS NULLNULL进行比较。

例如:“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值)。