2

我想知道是否有一种方法可以只选择列中的某些值以用于 GROUP_CONCAT 而不从 SELECT 中排除不匹配的列。

这是具体的场景:对于我的 WordPress 网站,我的表wp_22_postswp_22_postmeta表在帖子和元数据之间具有一对多的关系。我想对加入的结果进行分组,并为每个组wp_22_posts.ID选择一个以分号分隔的列表。如果键匹配“authorid”或“isbn”,我只想获取元键和值;但是,我不想排除没有“authorid”或“isbn”的行- 对于不匹配的行,我宁愿只返回或类似的东西。wp_22_postmeta.meta_keywp_22_postmeta.meta_valuenull

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

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
4

1 回答 1

5

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

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

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

于 2012-06-20T17:08:28.633 回答