Мой первый подход будет примерно таким. Я не могу проверить это, потому что у меня нет образца DB
. Сделайте ваш пример SQL подзапросом нового запроса (у него есть родительский SKU). Присоединитесь к другому подзапросу, который содержит родительский SKU и данные, которые вы хотите. Основной запрос выбирает поля в нужном порядке.
SELECT baseSQL.title p_title,
parentSQL.title AS p_parent_title, -- second field in picture
baseSQL.shortdesc AS p_shortdesc,
baseSQL.longdesc AS p_longdesc,
baseSQL.sku AS p_sku,
baseSQL.parent_sku AS p_parent_sku,
baseSQL.price AS p_price,
baseSQL.img AS p_img,
baseSQL.mall AS p_mall,
baseSQL.product_categories AS p_categories
FROM
( SELECT
wp_posts.post_title AS title,
wp_posts.post_excerpt AS shortdesc,
wp_posts.post_content AS longdesc,
wp_postmeta1.meta_value AS sku,
wp_postmeta6.meta_value AS parent_sku,
wp_postmeta2.meta_value AS price,
wp_posts1.guid AS img,
wp_postmeta5.meta_value AS mall,
GROUP_CONCAT( wp_terms.name ORDER BY wp_terms.name SEPARATOR ', ' ) AS product_categories
FROM wp_posts
LEFT JOIN wp_postmeta wp_postmeta1
ON wp_postmeta1.post_id = wp_posts.ID
AND wp_postmeta1.meta_key = '_sku'
LEFT JOIN wp_postmeta wp_postmeta2
ON wp_postmeta2.post_id = wp_posts.ID
AND wp_postmeta2.meta_key = '_regular_price'
LEFT JOIN wp_postmeta wp_postmeta3
ON wp_postmeta3.post_id = wp_posts.ID
AND wp_postmeta3.meta_key = '_thumbnail_id'
LEFT JOIN wp_posts wp_posts1
ON wp_posts1.ID = wp_postmeta3.meta_value
AND wp_posts1.post_type = 'attachment'
LEFT JOIN wp_postmeta wp_postmeta5
ON wp_postmeta5.post_id = wp_posts.ID
AND wp_postmeta5.meta_key = 'send'
LEFT JOIN wp_postmeta wp_postmeta6
ON wp_postmeta6.post_id = wp_posts.ID
AND wp_postmeta6.meta_key = 'parent_plu'
LEFT JOIN wp_term_relationships
ON wp_term_relationships.object_id = wp_posts.ID
LEFT JOIN wp_term_taxonomy
ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
AND wp_term_taxonomy.taxonomy = 'product_cat'
LEFT JOIN wp_terms
ON wp_term_taxonomy.term_id = wp_terms.term_id
WHERE wp_posts.post_type = 'product' AND ( wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'hidden') AND wp_postmeta5.meta_value = 'yes'
GROUP BY wp_posts.ID
ORDER BY sku ASC
) baseSQL
LEFT JOIN
(
SELECT
wp_posts.post_title AS title,
wp_postmeta1.meta_value AS sku
FROM wp_posts
LEFT JOIN wp_postmeta wp_postmeta1
ON wp_postmeta1.post_id = wp_posts.ID
AND wp_postmeta1.meta_key = '_sku'
) parentSQL
ON baseSQL.parent_sku = parentSQL.sku
AND baseSQL.parent_sku > 0
GROUP BY baseSQL.sku
Проверьте производительность, возможно, перемещение группирования и упорядочивание за пределами станут более эффективными.
Я не предлагаюсделать подзапрос во вложенном JOIN в пределах оригинальных LEFT JOINS, потому что я не могу его протестировать, и отсюда и сейчас я не могу представить, как бы отреагировал это «перекрестное соединение» с postmeta1 и postmeta6.
Рекомендуюреализовать некоторый триггер и иметь поля sku и parent_sku в таблице wp_posts, и вы можете сделать простой подзапрос с самой таблицей. В mySQL нет иерархических запросов (пока я не знаю mySQL), как в Oracle, но, возможно, это поможет улучшить ваш запрос. Это зависит от вас.
Извините Если это не работает при копировании / вставке, это просто подход.
Отредактировано с помощью окончательного функционала SQL