MySQL - запрос / ошибка инструкции обновления поля

Приведенный ниже оператор возвращает результаты, которые я хочу полностью изменить «Отображение строк 0–29 (всего 2018, запрос занял 0,0781 секунды)»:

SELECT * FROM `wp_posts` WHERE `ID` IN

(SELECT `post_id` FROM `wp_postmeta` WHERE (`meta_key` = 'expires') AND (`meta_value` <= NOW() - INTERVAL 1 DAY) AND (`meta_value` IS NOT NULL));

Однако приведенное ниже сообщение возвращает ошибку "# 1292 - Усеченное неправильное значение даты и времени: ''", когда я пытаюсь обновить поле post_status этого набора результатов ... Где ошибка в синтаксисе моих вторых операторов пожалуйста (ниже)?

UPDATE `wp_posts` SET `post_status`='draft' WHERE `ID` IN

(SELECT `post_id` FROM `wp_postmeta` WHERE (`meta_key` = 'expires') AND (`meta_value` <= NOW() - INTERVAL 1 DAY) AND (`meta_value` IS NOT NULL));

Спасибо.


person Reece Couchman    schedule 29.09.2013    source источник
comment
Какой тип это meta_value?   -  person Mihai    schedule 29.09.2013
comment
Вы используете это в разных базах данных?   -  person juergen d    schedule 29.09.2013
comment
meta_value - это длинный текст   -  person Reece Couchman    schedule 29.09.2013
comment
Нет такой же базы данных. Просто разные таблицы внутри него.   -  person Reece Couchman    schedule 29.09.2013
comment
Что вы имеете в виду под разными таблицами? Имена таблиц в обоих запросах совпадают.   -  person juergen d    schedule 29.09.2013
comment
Я возвращаю данные из таблицы wp_postmeta в запрос к таблице wp_posts.   -  person Reece Couchman    schedule 29.09.2013
comment
Проблема не во второй части инструкции, так как SELECT * работает нормально.   -  person Reece Couchman    schedule 29.09.2013
comment
Что это возвращает? ВЫБРАТЬ post_id ИЗ wp_postmeta ГДЕ _3 _ ‹= (ВЫБРАТЬ сейчас () - ИНТЕРВАЛ 1 день)   -  person Mihai    schedule 29.09.2013


Ответы (1)


Попробуй это:

UPDATE `wp_posts` 
SET    `post_status` = 'draft' 
WHERE  `id` IN (SELECT `post_id` 
                FROM   `wp_postmeta` 
                WHERE  ( `meta_key` = 'expires' ) 
                       AND ( Str_to_date(`meta_value`, '%Y-%m-%d  %h:%i:%s') <= 
                             Now() 
                             - INTERVAL 1 day 
                           ) 
                       AND ( `meta_value` IS NOT NULL )); 

Или используйте присоединиться

UPDATE a SET a.post_status='draft' FROM `wp_posts` a 
INNER JOIN `wp_postmeta` b ON a.ID=b.post_id 
WHERE `meta_key` = 'expires'
AND (`meta_value` <= NOW() - INTERVAL 1 DAY) 
AND (`meta_value` IS NOT NULL)) 

Вы можете попробовать преобразовать длинный текст в datetime:

UPDATE wp_postmeta SET meta_value=STR_TO_DATE(`meta_value`,'%Y-%m-%d %h:%i:%s')
person Mihai    schedule 29.09.2013
comment
Спасибо ... Но это возвращает только 89 строк, а не 2018, которое я нашел с моим исходным утверждением в таблице wp_postmeta. - person Reece Couchman; 29.09.2013
comment
Пример данных для столбца meta_value: 2013-07-24 19:03:00. Он также имеет другие значения, не связанные с датой, такие как «3», «по умолчанию» и т. Д. Но все даты указаны в формате 2013-07-24 19:03:00. Спасибо - person Reece Couchman; 29.09.2013
comment
ВЫБРАТЬ post_id ИЗ wp_postmeta ГДЕ (meta_key = 'истекает') И (meta_value ‹= СЕЙЧАС () - ИНТЕРВАЛ 1 ДЕНЬ) И (meta_value НЕ ПУСТОЙ); Возвращает 2018 строк абсолютно нормально ... Я просто не могу заставить работать первую часть запроса UPDATE ... - person Reece Couchman; 29.09.2013
comment
# 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, чтобы найти правильный синтаксис рядом с 'FROM wp_posts INNER JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id' в строке 1 - person Reece Couchman; 29.09.2013
comment
# 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с 'FROM wp_posts a INNER JOIN wp_postmeta b ON a.ID = b.post_id WHERE' meta_k 'в строке 1 - person Reece Couchman; 29.09.2013
comment
Теперь у меня другая ошибка ... # 1411 - Неверное значение даты и времени: '2013-08-04 23:59:59' для функции str_to_date - person Reece Couchman; 29.09.2013
comment
Кто-нибудь может помочь? - person Reece Couchman; 29.09.2013