【发布时间】:2012-06-20 17:04:52
【问题描述】:
我想知道是否有一种方法可以只选择列中的某些值以用于 GROUP_CONCAT 而不从 SELECT 中排除不匹配的列。
以下是具体场景:对于我的 WordPress 网站,我有 wp_22_posts 和 wp_22_postmeta 表,它们在帖子和元数据之间存在一对多关系。我想按wp_22_posts.ID 对加入的结果进行分组,并为每个组选择一个以分号分隔的wp_22_postmeta.meta_key 和wp_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
【问题讨论】:
标签: mysql select group-by group-concat