2014-08-31 3 views
0

Я пытаюсь использовать результат SELECT, подзапроса в моем ИНЕКЕ:Использование SELECT, подзапрос в ИНЕКЕ не работает

SELECT 
ID, 
post_parent as parent, 
post_status, 
(SELECT post_status as p FROM wp_posts WHERE ID = parent) as parent_status 
FROM wp_posts 
WHERE post_type = 'attachment' 
AND post_status = 'inherit' 
AND post_parent != 0 
AND parent_status = 'publish' 
ORDER BY post_date DESC 

Но это не похоже, MySQL знает колонки parent_status, ошибка:

#1054 - Unknown column 'parent_status' in 'where clause' 

Однако, если вы удалите и parent_status = 'опубликовать', вы получите результаты обратно, включая колонки parent_status:

ID  parent post_status parent_status 
1908 1904 inherit  publish 
1907 1904 inherit  publish 
1906 1904 inherit  publish 
1905 1904 inherit  publish 
1902 1900 inherit  publish 
.... 

Цель запроса состоит в том, чтобы захватить идентификатор post_parent во внешнем запросе, а затем в подзапросе захватить post_status родителя. Это WordPress, и я пытаюсь перечислить вложения мультимедиа только в том случае, если у них есть родитель, и этот родитель опубликован.

Возможно, я делаю что-то принципиально неправильно, пытаясь использовать подзапрос SELECT с предложением WHERE. Любые советы оценены.

ответ

2

Вы не можете использовать псевдоним столбца в предложении where. У вас есть несколько вариантов. В этом случае лучше всего использовать расширение MySQL, которое допускает логику в предложении having. У вас также есть логическая проблема в подзапросе. Я думаю, вы имеете в виду:

SELECT ID, post_parent as parent, post_status, 
     (SELECT post_status FROM wp_posts wp2 WHERE wp2.ID = wp.post_parent) as parent_status 
FROM wp_posts wp 
WHERE post_type = 'attachment' AND post_status = 'inherit' AND post_parent <> 0 
HAVING parent_status = 'publish' 
ORDER BY post_date DESC; 
+0

Отлично работает, и спасибо за объяснение! – khromov

Смежные вопросы