使用以下查询,我从wp_posts和wp_postmeta表中获取了结果。
从wp_posts a,wp_postmeta b中选择a.,b.其中a.ID=b.post_IDAND a.postrongtatus='publish'AND a.post_type='psc-product'
从上面的结果来看,我想将结果过滤到另一个阶段
正如您所知,wp_postmeta结构类似于
meta_id|post_id|meta_key|meta_value
我想将结果的所有meta_key值设置为列名,并将其相应的值作为其值。
例如,如果表格类似:
Meta_id----------------post_id----------------Meta_key----------------Meta_value
1----------------31----------------mk1----------------mv1
2----------------31----------------mk2----------------mv2
3----------------31----------------mk3----------------mv3
预期结果是:
Meta_id--------post_id--------mk1--------mk2--------mk3
1------------------31------------------mv1----------mv2----------mv3
这可能吗???我希望这与我的联接查询一起使用。
问题的格式不正确。请原谅。
如果元密钥有限,则可以使用CASE
SELECT a.*,b.Meta_id, b.post_id,
CASE WHEN b.meta_key ='mk1' THEN b.meta_value END `mk1`,
CASE WHEN b.meta_key ='mk2' THEN b.meta_value END `mk2`,
CASE WHEN b.meta_key ='mk3' THEN b.meta_value END `mk3`
FROM wp_posts a
JOIN wp_postmeta b ON( a.ID = b.post_id )
WHERE a.post_status = 'publish'
AND a.post_type='wpsc-product'
AND b.meta_key IN('mk1','mk2','mk3')
编辑对于重复问题,您可以使用JOIN
SELECT p.*,
a.Meta_id,
a.post_id,
a.meta_value mk1,
b.meta_value mk2,
c.meta_value mk3
FROM wp_posts p
LEFT JOIN wp_postmeta a ON(p.ID =a.post_id)
JOIN wp_postmeta b USING(post_id) /* is equal to ON(b.post_id = a.post_id) */
JOIN wp_postmeta c USING(post_id)
WHERE a.meta_key = 'mk1'
AND b.meta_key = 'mk2'
AND c.meta_key='mk3'
Fiddle演示仅适用于元表
SELECT Meta_id,post_id,
MAX(case when meta_key= 'mk1' then meta_value end) As mk1,
MAX(case when meta_key= 'mk2' then meta_value end) As mk2,
MAX(case when meta_key= 'mk3' then meta_value end) As mk3,
MAX(case when meta_key= 'mk4' then meta_value end) As mk4
FROM wp_postmeta
GROUP BY Meta_id,post_id
如果meta_value列的值不是固定的,则搜索SQL Server中PIVOT功能的MySQL实现。