w_b_x
@w_b_x

MYSQL — Почему update обновляет два значения вместо одного?

Доброго времени суток!

Есть у меня PHP-код. Он находит в БД самую "старую" запись, а именно запись у которой в столбце "last" типа datetime самая старая дата стоит в сравнении с другими. Берёт ID этой записи и обновляет её дату на нынешнюю.

Однако как я не крутил этот код и не пытал, он меняет дату не у одной записи, а у всех что подходят под описание status=1. Как это исправить и почему это происходит?

//Получаем из БД самую старую запись
$sql1 = mysql_query("SELECT `id` FROM advert WHERE status=1 ORDER BY last LIMIT 1"); 
//Проверяем есть ли вообще записи подходящие под описание
if(mysql_num_rows($sql1) != 0){
//Создаем ассоциативный массив найденной записи
$adata = mysql_fetch_assoc($sql1);
//Задаем переменную с нынешним временем
$now = date("Y-m-d H:i:s");
//Меняем дату у найденной записи
mysql_query("UPDATE advert SET last = '".$now."' WHERE id=".$adata['id']);
}


P.S. Если выполняю запрос "SELECT `id` FROM advert WHERE status=1 ORDER BY last LIMIT 1" через PhpMyAdmin то получаю одну единственную запись, которая мне и нужна.
  • Вопрос задан
  • 616 просмотров
Решения вопроса 1
w_b_x
@w_b_x Автор вопроса
Выполнил ваш запрос через SQL - всё правильно работает. Как только делаю через php:
mysql_query("UPDATE `advert` 
    SET `last` = NOW() 
    WHERE `status` = 1 
    ORDER BY `last` 
    LIMIT 1");

Меняет у двух сразу 0_о. Что не так?
30843530c16742ecbd441062701bb991.png
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
NTP
@NTP
Алфавитный быть во всем должен порядок!
Это делается в один SQL-запрос:
UPDATE advert
SET last = NOW()
WHERE id = (
    SELECT id
    FROM advert
    WHERE status = 1
    ORDER BY last
    LIMIT 1
)
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
А просто сделать?
UPDATE `advert` 
    SET `last` = NOW() 
    WHERE `status` = 1 
    ORDER BY `last` 
    LIMIT 1;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы