0

在下表中,元键logo_ID和基于字段show_logo相互关联。post_id如何获得仅使用mysqllogo_ID的行show_logo的 值?1

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表。我$wpdb用来查询数据库,所以一切都必须在 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 回答