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

时间:2012-06-20 17:04:53

标签: 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

1 个答案:

答案 0 :(得分:5)

我相信您可以在CASE中使用GROUP_CONCAT代替列名:

GROUP_CONCAT(CASE WHEN postmeta.meta_key='authorid' OR postmeta.meta_key='isbn'
 THEN postmeta.meta_key END, .....

抱歉,我目前无法测试,但它应该可以正常工作

相关问题