Я хочу написать собственный SQL-запрос для получения продуктов (записей с post_type = 'product') с двумя конкретными значениями в двух разных таксономиях.
По сути, я хочу получить продукты, которые имеют определенный цвет и относятся к определенной категории.
Обе таксономии можно найти здесь:
- product_cat - таксономия для категории
- pa_colour - это таксономия цвета (которая является атрибутом продукта )
Вот пример: я хотел бы получить все продукты, которые имеют зеленый цвет и относятся к категории платья
Я пробовал разные подходы. Позвольте мне провести вас через это.
Если я бегу:
SELECT
wp_vge8pp_posts.post_title, wp_term2.term_id
FROM wp_vge8pp_posts
LEFT JOIN wp_vge8pp_term_relationships
ON wp_vge8pp_term_relationships.object_id = wp_vge8pp_posts.ID
LEFT JOIN wp_vge8pp_term_taxonomy wp_tax1
ON wp_vge8pp_term_relationships.term_taxonomy_id = wp_tax1.term_taxonomy_id
AND wp_tax1.taxonomy = 'product_cat'
LEFT JOIN wp_vge8pp_term_taxonomy wp_tax2
ON wp_vge8pp_term_relationships.term_taxonomy_id = wp_tax2.term_taxonomy_id
AND wp_tax2.taxonomy = 'pa_colour'
LEFT JOIN wp_vge8pp_terms wp_term1
ON wp_tax1.term_id = wp_term1.term_id
LEFT JOIN wp_vge8pp_terms wp_term2
ON wp_tax2.term_id = wp_term2.term_id
WHERE wp_vge8pp_posts.post_type = 'product'
AND wp_vge8pp_posts.post_status = 'publish'
AND wp_term2.name = 'green' /* GREEN COLOUR */
Я получаю все продукты с атрибутом pa_colour = green, и это правильный результат.
Тогда, если я бегу:
SELECT
wp_vge8pp_posts.post_title, wp_term2.term_id
FROM wp_vge8pp_posts
LEFT JOIN wp_vge8pp_term_relationships
ON wp_vge8pp_term_relationships.object_id = wp_vge8pp_posts.ID
LEFT JOIN wp_vge8pp_term_taxonomy wp_tax1
ON wp_vge8pp_term_relationships.term_taxonomy_id = wp_tax1.term_taxonomy_id
AND wp_tax1.taxonomy = 'product_cat'
LEFT JOIN wp_vge8pp_term_taxonomy wp_tax2
ON wp_vge8pp_term_relationships.term_taxonomy_id = wp_tax2.term_taxonomy_id
AND wp_tax2.taxonomy = 'pa_colour'
LEFT JOIN wp_vge8pp_terms wp_term1
ON wp_tax1.term_id = wp_term1.term_id
LEFT JOIN wp_vge8pp_terms wp_term2
ON wp_tax2.term_id = wp_term2.term_id
WHERE wp_vge8pp_posts.post_type = 'product'
AND wp_vge8pp_posts.post_status = 'publish'
AND wp_term1.name = 'dresses' /* DRESSES CATEGORY */
Я получаю все товары, которые относятся к категории "платья", и это правильный результат.
ОДНАКО, когда я запрашиваю обе таксономии вместе, продукты не возвращаются:
SELECT
wp_vge8pp_posts.post_title, wp_term2.term_id
FROM wp_vge8pp_posts
LEFT JOIN wp_vge8pp_term_relationships
ON wp_vge8pp_term_relationships.object_id = wp_vge8pp_posts.ID
LEFT JOIN wp_vge8pp_term_taxonomy wp_tax1
ON wp_vge8pp_term_relationships.term_taxonomy_id = wp_tax1.term_taxonomy_id
AND wp_tax1.taxonomy = 'product_cat'
LEFT JOIN wp_vge8pp_term_taxonomy wp_tax2
ON wp_vge8pp_term_relationships.term_taxonomy_id = wp_tax2.term_taxonomy_id
AND wp_tax2.taxonomy = 'pa_colour'
LEFT JOIN wp_vge8pp_terms wp_term1
ON wp_tax1.term_id = wp_term1.term_id
LEFT JOIN wp_vge8pp_terms wp_term2
ON wp_tax2.term_id = wp_term2.term_id
WHERE wp_vge8pp_posts.post_type = 'product'
AND wp_vge8pp_posts.post_status = 'publish'
AND wp_term2.name = 'green' /* GREEN COLOUR */
AND wp_term1.name = 'dresses' /* DRESSES CATEGORY */
Как я могу исправить запрос, чтобы получить продукты, которые имеют зеленый цвет и относятся к категории платья ?
Примечание. Если это полезно, приведем структуру БД для Woocommerce: http://www.webhat.in/article/woocommerce-tutorial/how-product-attribute-are-stored-in-database/