Я пытаюсь обновить свою первую строку в моей базе данных. Я использую 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()); } } }
Правильно ли этот запрос?
В MySQL используйте IS NULL
для сравнения с NULL
.
Например: « UPDATE table SET field = 'yes' WHERE field IS NULL
"
NULL не является строкой, поэтому вы не должны использовать = 'NULL', если только вы не установите его для этого строкового значения. Вместо этого используйте IS NULL.
Вам нужно определить «первый ряд». Первая строка основана на значении автоинкрементного идентификатора? Сначала на основе даты отметки времени? Вы должны указать это, поскольку 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
Обратите внимание, что даже этот запрос не будет обновлять одну и ту же строку каждый раз. Он обновит первую запись (как указано ORDER BY), которая имеет значение NULL для указанного поля. Поэтому, если вы запустили этот запрос 10 раз, он изменил бы 10 разных записей (при условии, что есть много записей со значениями NULL).