如何编写MySQL子查询实现单次提取同post_id下的未知meta_value
单条SQL查询实现同post_id下关联meta值获取方案
这里提供两种可直接运行的实现方案:
方案1:自连接查询(更推荐,性能更优)
通过关联同一张表的两条目标记录直接取数,避免子查询开销,数据量较大时执行效率更高:
$sql = "SELECT t1.meta_value FROM `my_table` t1 INNER JOIN `my_table` t2 ON t1.post_id = t2.post_id WHERE t1.meta_key = 'key_1' AND t2.meta_key = 'key_2' AND t2.meta_value = %s"; $sql = $wpdb->prepare( $sql, 'known_value' ); $result = $wpdb->get_var($sql);
该方案天然兼容单个known_value对应多个post_id的场景,可正常返回所有匹配的key_1对应的meta_value。
方案2:修正后的子查询写法
你原有子查询逻辑本身没有问题,大概率失败的原因是当子查询返回多个post_id结果时,=号不支持匹配多个值,将=改为IN即可兼容所有场景:
$sql = "SELECT `meta_value` FROM `my_table` WHERE `meta_key` = 'key_1' AND `post_id` IN ( SELECT `post_id` FROM `my_table` WHERE `meta_key` = 'key_2' AND `meta_value` = %s )"; $sql = $wpdb->prepare( $sql, 'known_value' ); $result = $wpdb->get_var($sql);
如果你的业务场景确定一个known_value只会对应唯一的post_id,可先排查是否存在表名/字段名拼写错误、无匹配记录等问题,排查后原有写法也可正常运行。
内容的提问来源于stack exchange,提问作者Lucky7even
相关产品推荐
相关产品推荐

