我在存储帖子,用户在一个包含列的自定义表中跟踪id
, post_id
和user_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
?
SO网友:adrian7
不过,这里有一个想法,它需要能够使用$wpdb进行自定义SQL查询。
由于您希望获得用户跟随的帖子,因此可以创建具有以下结构的视图:
id user_id post_id post_title post_content ... (all other post fields)
不要担心重复帖子。
当你选择时,你只需要做一个简单的select * from the_view where...
.
稍后,您可以使用memcache或其他对象缓存技术缓存来自此视图的结果,以加快速度。