SQL连接内容格式不同的列:PHP查询字段匹配问题
解决两个数据库表字段格式不匹配的关联问题
嘿,这个字段匹配的问题我之前也碰到过!核心就是把两个格式不一样的字段转换成相同格式再关联,给你两种可行的方案:
方案一:从meta_key中提取数字匹配id
我们可以通过字符串处理,把wp_postmeta.meta_key里的_field_前缀去掉,提取出后面的数字,再和wp_nf3_fields.id关联。这里用SUBSTRING截取字符串,再转成整数类型确保匹配准确:
$newResult = $conn -> query("SELECT wp_nf3_fields.id, wp_nf3_fields.parent_id, wp_postmeta.meta_key FROM wp_postmeta LEFT JOIN wp_nf3_fields ON CAST(SUBSTRING(wp_postmeta.meta_key, 7) AS UNSIGNED) = wp_nf3_fields.id");
SUBSTRING(wp_postmeta.meta_key, 7):因为_field_是6个字符,从第7位开始截取就能得到后面的数字部分CAST(... AS UNSIGNED):把截取到的字符串转成无符号整数,避免字符串和数字匹配时的潜在问题
方案二:把id拼接成meta_key的格式匹配
反过来,我们可以把wp_nf3_fields.id拼接成_field_数字的格式,直接和meta_key做等值匹配:
$newResult = $conn -> query("SELECT wp_nf3_fields.id, wp_nf3_fields.parent_id, wp_postmeta.meta_key FROM wp_postmeta LEFT JOIN wp_nf3_fields ON wp_postmeta.meta_key = CONCAT('_field_', wp_nf3_fields.id)");
CONCAT('_field_', wp_nf3_fields.id):把前缀和id拼接成和meta_key完全一致的格式,这种方式更直观,而且如果wp_nf3_fields.id有索引的话,性能会比方案一更好
额外提醒
如果你的wp_postmeta表里存在不是_field_数字格式的meta_key,建议加上过滤条件避免无效关联:
WHERE wp_postmeta.meta_key LIKE '_field_%'
内容的提问来源于stack exchange,提问作者Tom F
相关产品推荐
相关产品推荐

