扩展WP_QUERY-优化SQL查询

时间:2013-07-29 作者:John

我在存储帖子,用户在一个包含列的自定义表中跟踪id, post_iduser_id. 为了获取用户关注的帖子,我对WP_查询进行了如下扩展:

class WP_Query_Posts_User_Follows extends WP_Query {
    function __construct($args=array()) {
        if ( !empty($args[\'followed_by\']) ) {
            $this->followed_by = $args[\'followed_by\'];
            add_filter(\'posts_where\', array($this, \'posts_where\'));
        }
        parent::query($args);
    }

    function posts_where($where) {
        global $wpdb;
        $table = $wpdb->prefix . \'post_followed_by\';
        $where .= $wpdb->prepare(" AND ID IN (SELECT post_id FROM $table WHERE user_id = %d)", $this->followed_by);
        return $where;
    }
}
如果您注意到WHERE 条款我的理解是,子查询很糟糕,因为它们会影响性能,尤其是在这种情况下,子查询可能返回数百或数千个post_ids 用户遵循的。考虑到我需要使用WP\\U查询,并且无法直接使用wpdb?

2 个回复
SO网友:adrian7

不过,这里有一个想法,它需要能够使用$wpdb进行自定义SQL查询。

由于您希望获得用户跟随的帖子,因此可以创建具有以下结构的视图:

id user_id post_id post_title post_content ... (all other post fields)
不要担心重复帖子。

当你选择时,你只需要做一个简单的select * from the_view where... .

稍后,您可以使用memcache或其他对象缓存技术缓存来自此视图的结果,以加快速度。

SO网友:NetWeight Company

你可以使用最好的方法:)也许,如果你想优化你的查询,你可以使用posts 2 posts插件。您不需要筛选查询。链接-https://github.com/scribu/wp-posts-to-posts/wiki

结束

相关推荐

Wpdb get_var没有返回任何结果(经过验证的MySQL查询只返回一个值)

我正在尝试修改wordpress插件,使其更适合我们的需要。我有一个自定义的user\\u meta,名为practice,我们根据实践来分隔用户,因此我们还需要根据实践来分隔测验结果。我的问题是,我无法让我的查询返回实践。有人能看看这个告诉我我做错了什么吗? function save_score( $json, $user_id = null, $practice = null ) { global $wpdb, $data; $d