2012-04-07 6 views
1

теперь попробовать этот запрос в PhpMyAdmin для обновления wp_postmeta ценностных форм wp_posts:некоторые ошибки в ИНЕКЕ

UPDATE wp_postmeta 
SET meta_value = (SELECT DISTINCT id FROM wp_posts) 
WHERE EXISTS (select 1 
       from wp_posts 
       join articles on wp_posts.post_name=articles.image) 
    AND (wp_posts.post_type='attachment') 
    AND (wp_postmeta.meta_key='_thumbnail_id') 

но дал мне эту ошибку: # 1054 - Неизвестный столбец «wp_posts.post_type» в «где предложение '!

Я пытаюсь изменить его без пользы, любой может помочь?

+2

После исправления ошибки 1054 это приведет к ошибке в meta_value =, поскольку в подзапросе может возвращаться более одной строки. –

+0

Что вы предлагаете? –

ответ

0

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

(SELECT DISTINCT id FROM wp_posts) 

до конца заявления.

+0

Я пробовал, но не работал –

+0

Какая ошибка сейчас? Можете ли вы дать некоторую информацию о столбцах таблиц wp_posts и wp_postmeta? –

+0

Ошибка синтаксиса SQL http://codex.wordpress.org/images/9/9e/WP3.0-ERD.png –

1
AND (wp_posts.post_type='attachment') 

Я думаю, что реальная проблема здесь, является то, что единственным местом, где вы ссылка wp_posts в вашей EXISTS и SET подзапросов. Эта часть предложения WHERE (приведенная выше) выходит за рамки ваших подзапросов и не знает об этом.

Если вы не предназначены для вашего EXISTS подзапрос выглядеть следующим образом:

(select 1 
from wp_posts 
join articles on wp_posts.post_name=articles.image 
WHERE wp_posts.post_type='attachment') 

В этом случае wp_posts упоминается в том же наборе скобок и синтаксически корректен. Так как это, вероятно, не даст вам то, что вы после этого, попробуйте вместо этого:

UPDATE wp_postmeta 
INNER JOIN wp_posts ON wp_posts.id = wp_postmeta.post_id 
SET meta_value = (SELECT DISTINCT id FROM wp_posts WHERE [some condition]) 
WHERE EXISTS (select 1 
      from wp_posts 
      join articles on wp_posts.post_name=articles.image) 
    AND (wp_posts.post_type='attachment') 
    AND (wp_postmeta.meta_key='_thumbnail_id') 

Примечание # 1: Я делаю предположение, что ваша таблица wp_postmeta имеет POST_ID поле, которое соответствует идентификатору на wp_posts.

Примечание # 2: Как указано OMG Ponies ...

SET meta_value = (SELECT DISTINCT id FROM wp_posts) 

Эта линия будет наиболее вероятно, выдаст ошибку для возвращения нескольких значений, где только 1, как ожидается. Обратите внимание, что я добавил «WHERE [some condition]» выше. Здесь вы захотите добавить свое предложение WHERE. И это должно быть то, что ограничивает результат подзапроса только одним результатом.

+0

Вы на правильном пути, но запрос должен быть присоединен к wp_posts –

+0

@LoaiMostafa edit сделал. – Aaron