一致しない列をSELECTから除外せずに、GROUP_CONCATで使用するために、列内の特定の値のみを選択する方法があるかどうか疑問に思いました。
具体的なシナリオは次のとおりです。私のWordPressサイトには、投稿とメタの間に1対多の関係を持つテーブルがありますwp_22_posts
。結合された結果をグループ化し、グループごとにセミコロンで区切られたリストを選択しwp_22_postmeta
たいと思います。キーが「authorid」または「isbn」と一致する場合にのみ、メタキーと値を取得したいと思います。ただし、「authorid」または「isbn」のない行を除外したくはありません。一致しない行については、単に返すか、そのようなものを使用したいと思います。wp_22_posts.ID
wp_22_postmeta.meta_key
wp_22_postmeta.meta_value
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