And*_*rew 2 mysql select group-by group-concat
我想知道是否有一种方法只选择列中的某些值以便在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
Run Code Online (Sandbox Code Playgroud)
我相信你可以使用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)
对不起,我现在无法测试它,但它应该可以工作
| 归档时间: |
|
| 查看次数: |
1575 次 |
| 最近记录: |