MySQL只选择列中的某些值而不排除行

And*_*rew 2 mysql select group-by group-concat

我想知道是否有一种方法只选择列中的某些值以便在GROUP_CONCAT中使用而不排除SELECT中的不匹配列.

这是具体的场景:对于我的WordPress网站,我有wp_22_postswp_22_postmeta帖子和元之间有一对多关系的表格.我想将连接的结果分组wp_22_posts.ID,wp_22_postmeta.meta_keywp_22_postmeta.meta_value为每个组选择一个以分号分隔的列表.我只想抓住元键和值,如果键匹配"authorid"或"isbn"; 但是,我不想在没有"authorid"或"isbn"的情况下排除行 - 我宁愿只返回null非匹配行的类似行.

以下是我目前使用的查询,但正如您所看到的,它正在提取所有元数据:

SELECT posts.post_title, MAX(posts.post_date_gmt), posts.post_content, posts.guid AS url, posts.comment_count,
    GROUP_CONCAT(postmeta.meta_key ORDER BY postmeta.meta_value DESC SEPARATOR ';') AS meta_key,
    GROUP_CONCAT(postmeta.meta_value ORDER BY postmeta.meta_value DESC SEPARATOR ';') AS meta_value
FROM wp_22_posts AS posts
JOIN wp_22_postmeta AS postmeta ON (posts.ID = postmeta.post_id)
WHERE posts.post_status = 'publish'
GROUP BY posts.ID
Run Code Online (Sandbox Code Playgroud)

a1e*_*x07 5

我相信你可以使用CASE而不是列名GROUP_CONCAT:

GROUP_CONCAT(CASE WHEN postmeta.meta_key='authorid' OR postmeta.meta_key='isbn'
 THEN postmeta.meta_key END, .....
Run Code Online (Sandbox Code Playgroud)

对不起,我现在无法测试它,但它应该可以工作