我想知道是否有办法只选择列中的某些值以便在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
答案 0 :(得分:5)
我相信您可以在CASE
中使用GROUP_CONCAT
代替列名:
GROUP_CONCAT(CASE WHEN postmeta.meta_key='authorid' OR postmeta.meta_key='isbn'
THEN postmeta.meta_key END, .....
抱歉,我目前无法测试,但它应该可以正常工作