2

一致しない列をSELECTから除外せずに、GROUP_CONCATで使用するために、列内の特定の値のみを選択する方法があるかどうか疑問に思いました。

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