Возможно ли использовать Max () в ГДЕ порции ОБНОВЛЕНИЯ - PullRequest
0 голосов
/ 28 января 2020

PHP версия 7.0 mySql версия 5.5

Я пытаюсь выполнить ОБНОВЛЕНИЕ для существующей записи. Я ищу максимум (DateTime), чтобы получить последнюю запись. DateTime является ключевым полем и имеет тип DateTime. Есть одно поле, которое я должен sh обновить, когда найду эту запись (email_sent).

Мой код:

    UPDATE $mysqldb SET email_sent='1', WHERE (DateTime=SELECT max(DateTime) FROM $mysqldb)

$ mysqldb уже определен ранее. Код не запускается в консоли, выдает ошибку 1064 рядом с "ГДЕ ...". Я попытался сгруппировать несколько различных способов с круглыми скобками в части WHERE ... не радость. Я уверен, что это что-то простое (я надеюсь!). Я искал пару часов, пытаясь найти пример и читая документы. Любая помощь приветствуется!

Ответы [ 2 ]

2 голосов
/ 28 января 2020

Я считаю, что проблема в запятой перед предложением WHERE. Кроме того, хотя у меня нет опыта работы с MySQL, в Oracle я считаю, что вам нужно было бы поместить часть «SELECT MAX (...)» в скобки. Наконец, не мешало бы использовать псевдонимы таблиц, чтобы легче было различать каждый контекст. Попробуйте это:

UPDATE $mysqldb t1 SET t1.email_sent='1' WHERE (t1.DateTime=(SELECT max(t2.DateTime) FROM $mysqldb t2))
0 голосов
/ 28 января 2020

MySql не позволяет использовать подзапрос, который непосредственно ссылается на таблицу, для обновления. Вы должны заключить подзапрос в другой:

UPDATE $mysqldb 
SET email_sent='1' 
WHERE DateTime= (SELECT t.DateTime FROM (SELECT max(DateTime) DateTime FROM $mysqldb) t)

Другой вариант с предложением ORDER BY, если обновляется только 1 строка:

UPDATE $mysqldb 
SET email_sent='1' 
ORDER BY DateTime DESC
LIMIT 1
...