Мне нужна помощь в соединении двух запросов, чтобы получить одну таблицу в результате - PullRequest
2 голосов
/ 17 мая 2019

Здравствуйте, мне нужна помощь для объединения двух запросов, которые я использую, чтобы получить результат в одном запросе вместо двух разных

Первый запрос:

SELECT p.ID as product_id, p.post_title,
       max( CASE WHEN pm.meta_key = 'product_gender' and p.ID = pm.post_id THEN pm.meta_value END ) as gender, 
       max( CASE WHEN pm.meta_key = '_price' and p.ID = pm.post_id THEN pm.meta_value END ) as price, 
       max( CASE WHEN pm.meta_key = 'product_color' and p.ID = pm.post_id THEN pm.meta_value END ) as color, 
       max( CASE WHEN pm.meta_key = 'product_category' and p.ID = pm.post_id THEN pm.meta_value END ) as category,
       max( CASE WHEN pm.meta_key = 'product_size' and p.ID = pm.post_id THEN pm.meta_value END ) as size
FROM    
  wp_posts p 
  join wp_postmeta pm on p.ID = pm.post_id 
group by 
  p.ID 

Второй:

SELECT parentmeta.post_id as post_id,
 concat((select option_value from wp_options where option_name ='siteurl'  limit 1),'/wp-content/uploads/',childmeta.meta_value)                           as url
 FROM wp_postmeta childmeta 
 INNER JOIN wp_postmeta parentmeta ON (childmeta.post_id=parentmeta.meta_value)
 WHERE parentmeta.meta_key='_thumbnail_id' and childmeta.meta_key = '_wp_attached_file'
 AND parentmeta.post_id = p.ID  //I want to used the same ID as the previous query

Теперь обе таблицы дают мне этот результат

Первый запрос:

product_id  post_title   gender    price   color   category   size
83          Puma-Tshirt  Man       19      RED     Tshirt     Medium
86          Nike-Pants   Man       49      BLACK   Pants      Medium

Второй запрос:

product_id   url
83           www.img.com/puma.jpg
86           www.img.com/nike.jpg

Я хочу объединить запросы, чтобы получить что-то вроде:

product_id  post_title   gender    price   color   category   size   url
83          Puma-Tshirt  Man       19      RED     Tshirt     Medium www.img.com/puma.jpg
86          Nike-Pants   Man       49      BLACK   Pants      Medium www.img.com/nike.jpg

Вся помощь очень ценится, спасибо.

Ответы [ 3 ]

2 голосов
/ 17 мая 2019
( SELECT p.ID as product_id, p.post_title,
       max( CASE WHEN pm.meta_key = 'product_gender' and p.ID = pm.post_id THEN pm.meta_value END ) as gender, 
       max( CASE WHEN pm.meta_key = '_price' and p.ID = pm.post_id THEN pm.meta_value END ) as price, 
       max( CASE WHEN pm.meta_key = 'product_color' and p.ID = pm.post_id THEN pm.meta_value END ) as color, 
       max( CASE WHEN pm.meta_key = 'product_category' and p.ID = pm.post_id THEN pm.meta_value END ) as category,
       max( CASE WHEN pm.meta_key = 'product_size' and p.ID = pm.post_id THEN pm.meta_value END ) as size
FROM    
  wp_posts p 
  join wp_postmeta pm on p.ID = pm.post_id 
group by 
  p.ID )   
UNION   
(SELECT parentmeta.post_id as post_id,
 concat((select option_value from wp_options where option_name ='siteurl'  limit 1),'/wp-content/uploads/',childmeta.meta_value)                           as url
 FROM wp_postmeta childmeta 
 INNER JOIN wp_postmeta parentmeta ON (childmeta.post_id=parentmeta.meta_value)
 WHERE parentmeta.meta_key='_thumbnail_id' and childmeta.meta_key = '_wp_attached_file'
 AND parentmeta.post_id = p.ID  //I want to used the same ID as the previous query)

Это даст вам требуемый результат.
От твоего вопроса это как будто ты просто хочешь комбинацию этих двух, независимо от их объединений и всего.

1 голос
/ 17 мая 2019

Структура запроса будет-

SELECT 
A.*,B.Url
FROM
(
    --Your First Query
)A
INNER JOIN 
(
    --Your Second Query
)B
ON A.Product_id = B.Product_id

Примечание. Используйте LEFT JOIN, если есть возможность, чтобы в Query 2 было меньше записей, чем в Query 1.

1 голос
/ 17 мая 2019

Вы можете присоединиться к двум запросам

select t1.*, t2.* 
from  (
  SELECT p.ID as product_id, p.post_title,
         max( CASE WHEN pm.meta_key = 'product_gender' and p.ID = pm.post_id THEN pm.meta_value END ) as gender, 
         max( CASE WHEN pm.meta_key = '_price' and p.ID = pm.post_id THEN pm.meta_value END ) as price, 
         max( CASE WHEN pm.meta_key = 'product_color' and p.ID = pm.post_id THEN pm.meta_value END ) as color, 
         max( CASE WHEN pm.meta_key = 'product_category' and p.ID = pm.post_id THEN pm.meta_value END ) as category,
         max( CASE WHEN pm.meta_key = 'product_size' and p.ID = pm.post_id THEN pm.meta_value END ) as size
  FROM wp_posts p 
  join wp_postmeta pm on p.ID = pm.post_id 
  group by  p.ID 
) t1 
inner join  (
  SELECT parentmeta.post_id as post_id,
   concat((select option_value from wp_options where option_name ='siteurl'  limit 1),'/wp-content/uploads/',childmeta.meta_value)                           as url
   FROM wp_postmeta childmeta 
   INNER JOIN wp_postmeta parentmeta ON (childmeta.post_id=parentmeta.meta_value)
   WHERE parentmeta.meta_key='_thumbnail_id' and childmeta.meta_key = '_wp_attached_file'
) t2 on t1.product_id = t2.post_id 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...