2014-12-03 35 views
1

我试图从wordpress表查询wp_postmeta 我需要从下面的图片_form_id_sub_id的数据。 我使用这个SQLMySQL查询从WP_PostMeta行到列

SELECT meta_value, 
MAX(CASE WHEN meta_key = '_field_14' THEN meta_value END) as a1, 
MAX(CASE WHEN meta_key = '_field_15' THEN meta_value END) as a2, 
MAX(CASE WHEN meta_key = '_field_17' THEN meta_value END) as a3, 
MAX(CASE WHEN meta_key = '_field_18' THEN meta_value END) as a4 
FROM wp_postmeta 
Group by post_id 

但A1至A4的NULL数据仍然出现在结果。 我SQL Fiddel 请指教,谢谢

enter image description here

预期的结果 expected result

回答

2

您需要选择post_id,meta_value中不存在group by所以你会得到一个随机值从每个发布

也只有职位54,56,57有这些领域,所以帖子的其余部分将得到NULL值。

SELECT post_id, 
       MAX(CASE WHEN meta_key = '_field_14' THEN meta_value END) as a1, 
       MAX(CASE WHEN meta_key = '_field_15' THEN meta_value END) as a2, 
       MAX(CASE WHEN meta_key = '_field_17' THEN meta_value END) as a3, 
       MAX(CASE WHEN meta_key = '_field_18' THEN meta_value END) as a4 
       FROM wp_postmeta 
       Group by post_id 

编辑:

按结果,你只是想从有值,你可以使用子查询和凝聚所有帖子元值,以得到你想要的

SELECT * FROM 
(
SELECT 
     MAX(CASE WHEN meta_key = '_field_14' THEN meta_value END) as a1, 
     MAX(CASE WHEN meta_key = '_field_15' THEN meta_value END) as a2, 
     MAX(CASE WHEN meta_key = '_field_17' THEN meta_value END) as a3, 
     MAX(CASE WHEN meta_key = '_field_18' THEN meta_value END) as a4 
FROM wp_postmeta 
Group by post_id 
)T 
where coalesce(a1,a2,a3,a4) is not null 
+0

谢谢你什么@雷达但仍然出现a1至a4的NULL,有什么想法? – vincmeister 2014-12-03 02:59:57

+0

@vincmeister,因为这些元键不存在其他职位,你会得到空值,如果你看到职位54,56,57得到适当的价值。如果你想,只为特定的数据后通过 – radar 2014-12-03 03:09:37

+0

组之前添加其中POST_ID = 54我想不选择POST_ID一般的结果,万一我有40 POST_ID,他们都将出现。相同的参数是meta_key = _form_id,meta_value = 3。有没有可能查询?再次感谢 – vincmeister 2014-12-03 03:16:29