Почему я продолжаю получать столбцы posts.ID unknown, пока столбец существует? - PullRequest
1 голос
/ 03 июля 2019

Это мой SQL-запрос WooCommerce ниже.Я получаю сообщение об ошибке,

Unknown column 'posts.ID' is 'on clause' 

, но мой столбец posts.ID существует.

SELECT DISTINCT posts.ID as product_id, posts.post_parent as parent_id FROM wp_posts posts, 
wp_terms terms, wp_term_relationships term_relationships LEFT JOIN wp_wc_product_meta_lookup 
wc_product_meta_lookup ON posts.ID=wc_product_meta_lookup.product_id WHERE 
posts.ID=term_relationships.object_id AND term_relationships.term_taxonomy_id=terms.term_id 
AND terms.name!='exclude-from-catalog' AND posts.post_type IN ('product') 
AND (  ( ( posts.post_title LIKE '%bruno%') OR ( posts.post_excerpt LIKE '%bruno%') 
OR ( posts.post_content LIKE '%bruno%' ) OR ( wc_product_meta_lookup.sku LIKE '%bruno%' ) )) 
AND posts.post_status IN ('publish') ORDER BY posts.post_parent ASC, posts.post_title ASC;

1 Ответ

1 голос
/ 03 июля 2019

Никогда не используйте запятые в предложении FROM. Всегда используйте правильный, явный, стандартный JOIN синтаксис.

Итак, напишите запрос правильно:

SELECT DISTINCT p.ID as product_id, p.post_parent as parent_id
FROM wp_posts p JOIN
     wp_term_relationships
     ON p.id = tr.object_id JOIN
     wp_terms t
     ON tr.term_taxonomy_id = t.term_id LEFT JOIN
     wp_wc_product_meta_lookup pml
     ON p.ID = pml.product_id
WHERE t.name <> 'exclude-from-catalog' AND
      p.post_type IN ('product') AND 
      (p.post_title LIKE '%bruno%' OR
       p.post_excerpt LIKE '%bruno%' OR
       p.post_content LIKE '%bruno%'  OR 
       pml.sku LIKE '%bruno%'
      ) AND
      p.post_status IN ('publish')
ORDER BY p.post_parent ASC, p.post_title ASC;

Примечания:

  • Особая проблема заключается в том, что , влияет на область видимости идентификаторов.Вы не можете ссылаться на псевдоним таблицы до запятой в предложении ON после запятой.
  • Я не вижу причин для дублирования имен таблиц.
  • Использование псевдонимов таблиц - это хорошо, но запроспроще, если псевдонимы короче.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...