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
- 版权声明:本作品使用知识共享(Creative Commons)的署名-非商业性使用-禁止演绎 4.0 国际许可协议。非商业转载请注明出处(作者及原文链接),商业转载请联系作者获得授权。


给站长留言