0

値が異なる2つの等しい列名(meta_value)を、2つではなく1つの行の結果にマージしたいと思います。

SELECT t1.ID, t1.post_content AS product, t2.meta_value AS price
FROM wp_posts AS t1
INNER JOIN wp_postmeta AS t2 ON ( t1.id = t2.post_id ) 
WHERE t1.post_type =  'product'
LIMIT 0 , 30

結果は

ID      product      price
1973    product1     12.35
1973    product1     12.10

そして、私はそれをこのように見せたい

ID      product      price      sell
1973    product1     12.35      12.10

価格のmeta_keyは_priceであり、sellのmeta_keyは_sellです。

4

3 に答える 3

3

caseステートメントで集計関数を使用してデータを変換できるようです

SELECT t1.ID, 
   t1.post_content AS product, 
   max(case when meta_key = '_price' then t2.meta_value end) AS price, 
   max(case when meta_key = '_sell' then t2.meta_value end) AS sell
FROM wp_posts AS t1
INNER JOIN wp_postmeta AS t2 ON ( t1.id = t2.post_id ) 
WHERE t1.post_type =  'product'
GROUP BY t1.ID, t1.post_content
LIMIT 0 , 30

ただし、テーブル構造に基づいて正確に明確ではないため、次のものも使用できる場合があります。

SELECT t1.ID, 
   t1.post_content AS product, 
   max(t2.meta_value) AS price, 
   min(t2.meta_value) AS sell
FROM wp_posts AS t1
INNER JOIN wp_postmeta AS t2 ON ( t1.id = t2.post_id ) 
WHERE t1.post_type =  'product'
GROUP BY t1.ID, t1.post_content
LIMIT 0 , 30
于 2012-12-17T14:35:38.167 に答える
1
SELECT
  t1.ID,
  t1.post_content AS product,
  max(case when t2.meta_key='_price' then t2.meta_value end) AS price,
  max(case when t2.meta_key='_sell' then t2.meta_value end) AS sell
FROM wp_posts AS t1
     INNER JOIN wp_postmeta AS t2 ON ( t1.id = t2.post_id )
WHERE t1.post_type =  'product'
GROUP BY t1.ID, t1.post_content
LIMIT 0 , 30
于 2012-12-17T14:37:59.960 に答える
0

これがお役に立てば幸いです。

SELECT t1.ID, t1.post_content AS product,max(t2.meta_value) as price,min(t2.meta_value) as sell
FROM wp_posts AS t1
INNER JOIN wp_postmeta AS t2 ON ( t1.id = t2.post_id ) 
WHERE t1.post_type =  'product'
LIMIT 0 , 30
于 2012-12-17T14:38:49.710 に答える