0

次の表では、メタ キーlogo_IDshow_logoがフィールドに基づいて相互に関連付けられていpost_idます。mysql のみを 使用しlogo_IDての行を持つ行の値を取得するにはどうすればよいですか?show_logo1

post_id  meta_key     meta_value
-------  -----------  ----------
262      logo_ID      263       
262      show_logo    0         
260      logo_ID      261       
260      show_logo    1         
258      logo_ID      259       
258      show_logo    1         

おなじみの場合、これは WPpostmetaテーブルからのものです。私は$wpdbdbをクエリするために使用しているので、すべてがmysqlにある必要があります(WP関数はどこにもありません)。

4

2 に答える 2

2

wp_postmetaで必要な値を指定して、テーブルをそれ自体に結合できます。WHERE

SELECT pm2.post_id, pm2.meta_key
FROM wp_postmeta pm1 
JOIN wp_postmeta pm2 
    ON pm2.post_id = pm1.post_id AND pm2.meta_key = 'logo_ID'
WHERE pm1.meta_key = 'show_logo' AND pm1.meta_value = 1

大量のデータを扱っている場合、wp_postmetaテーブルでインデックスを使用するため、これはかなり高速です。他の値も基準として取得したい場合、またはテーブルが他の投稿フィールドを取得したい場合はJOIN、さらに多くのことができます。wp_postmetawp_posts

SQL フィドル

于 2012-11-05T06:23:51.153 に答える
1

CASEの値に基づいてステートメントを使用して行をピボットすると、 の値を行にmeta_key表示しpost_idてから、サブクエリでラップできます。

SELECT *
FROM
(
    SELECT  post_id,
            MAX(CASE WHEN meta_key = 'logo_ID' THEN meta_value ELSE NULL END) logo_ID,
            MAX(CASE WHEN meta_key = 'show_logo' THEN meta_value ELSE NULL END) show_logo
    FROM    tableName
    GROUP BY post_ID
) a
WHERE show_logo = 1
于 2012-11-05T06:23:33.320 に答える