$POSTS_JOIN筛选器连接到什么?

时间:2015-10-07 作者:LeonardShelby

我正在尝试使用posts_join 筛选以联接2个表:wp_postmetawp_posts. 我是SQL的新手,所以我不确定自己是否感到困惑,因为我不了解WordPress是如何实现的posts_join, 或者如果我不理解SQL语法。

我的问题是:

为什么join语句中只使用一个表?我认为join语句需要2个表,这是因为posts_join 筛选器假定您总是将表加入到wp_posts?法典中的示例https://codex.wordpress.org/Plugin_API/Filter_Reference/posts_join使用类似的连接情况wp_postmetawp_posts.

$join .= "LEFT JOIN $wpdb->postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id ";

根据这个例子,我可以看到$wpdb->postmeta (即。wp_postmeta) 显式声明为要联接的表之一。但根据我对SQL的理解,我认为$wpdb->posts 也必须在ON条款前说明,如:

$join .= "$wpdb->posts LEFT JOIN $wpdb->postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id ";

所以我很困惑为什么$wpdb->posts 在ON子句之前未指定。WordPress还如何知道要联接的第二个表是什么?

谢谢你的帮助。

2 个回复
最合适的回答,由SO网友:Milo 整理而成

posts_join 只是完整SQL查询的一部分,您要加入的表在查询的前面被引用。

您可以使用posts_request 滤器

请参阅文档了解其余的query filters.

SO网友:Dave Hilditch

posts\\U join筛选器正在引用“posts”表的联接,即wp\\U posts

这就是为什么它被称为“posts\\u join”过滤器。

如果希望能够从输出中的其他表中选择列,或者希望能够在WHERE子句中按其他表中的列进行筛选,则需要使用此筛选器-尽管如果要加入以进行筛选,可以使用WHERE EXISTS或WHERE NOT EXISTS。

相关推荐

如何将WordPress配置为与Microsoft SQL Server数据库对话?

我们正在我们的intranet站点上构建WordPress站点,并希望将其连接到Microsoft SQL Server。我已经在IIS上下载并配置了PHP和PHP管理器。我还从键入此线程标题时弹出的已回答问题列表中下载了SQL Server DLL。我按照指示在PHP文件夹中下载了这些DLL。当我启动服务器地址以安装WordPress时,系统会提示我提供SQL DB名称、用户名、密码和DB主机名。我还下载了wp-db抽象插件,将wp-db抽象化。php文件放入WordPress文件保存的文件夹中,按照我