Copyright © 2020-2026
卯光宇 All Rights Reserved


WordPress数据表中的同义字段

WordPress 5.4自带有15张数据表,与WordPress数据有关的信息都存在其中。有些时候,为了高效地获取数据,不得不用$wpdb结合SQL直接操弄数据表。由于数据被存在不同的表中,用SQL查询数据时,可能需要在不同的表间进行匹配,这就需要用到不同表中含义相同的字段,需要注意的是,在WordPress的数据表中,那些同义字段的名字可能是不同的。

举个例子,如果想要从表wp_posts中取出类型为post、已发表的文档,SQL可以这样写:

SELECT * FROM {$wpdb->posts} p
WHERE p.post_type = 'post'
AND p.post_status = 'publish'

如果这时加进一步的限制,只提取那些阅读数大于100的文档,怎么做?假设文档用来记录阅读数的meta叫’views’,照葫芦画瓢,可以在上面的代码后补两行:

AND p.meta_key = 'views'
AND p.meta_value > 100

但事实上,这样做是无法取到想要的数据的,原因在于表wp_posts中不存在meta_key和meta_value这两个字段,这两个字段是存在表wp_postmeta中的。所以,跨表匹配是必须的。以下为正确的代码:

SELECT * FROM {$wpdb->posts} p
LEFT JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id
WHERE p.post_type = 'post'
AND p.post_status = 'publish'
AND pm.meta_key = 'views'
AND pm.meta_value > 100

在这里,匹配两张表用了表wp_posts中的字段ID和表wp_postmeta中的字段post_id,这就是上面讲的同义字段。同义字段含义相同,却可能有不同的名字,在应用中这是需要注意的。

下面是几组在WordPress应用中(我认为)最可能被用到的同义字段。

  • wp_posts:ID — wp_postmeta:post_id
  • wp_posts:ID — wp_comments:comment_post_ID
  • wp_posts:ID — wp_term_relationships:object_id
  • wp_comments:comment_ID — wp_commentmeta:comment_id (注意大小写)
  • wp_term_taxonomy:term_taxonomy_id — wp_term_relationships:term_taxonomy_id
  • wp_term_taxonomy:term_id — wp_terms:term_id
  • wp_terms:term_id — wp_termmeta:term_id

读后有收获欢迎打赏站长喝瓶元气森林😹


点赞    

扫一扫,点右上角⋯分享




   
   
    给站长留言    
😀😂😅😆😊😍😝🤭🌹🤝😵😭😱😳😣😴
昵称*
验证*:9-7 =