通过计算项目的二级查询对帖子进行排序

时间:2020-05-07 作者:gordie

我正在开发一个音乐插件。

它使用一个自定义表tracklist_items来存储播放列表中的每个曲目;其结构如下:

|id| |track_id| |tracklist_id| |order| |time|
因此,如果我想计算轨迹列表的总轨迹,我有以下功能:

function get_subtracks_count(){
  global $wpdb;
  if (!$this->post_id) return false;
  $querystr = $wpdb->prepare( "SELECT COUNT(*) FROM `tracklist_items` WHERE tracklist_id = %d", $this->post_id );
  return $wpdb->get_var($querystr);
}
但现在,我希望能够sort 执行查询时,按轨迹列出的轨迹列表会计数。

我应该如何做到这一点?

+:我看到人们通常使用元值对这类东西进行排序。上面的这个查询相当简单,所以我想它很快就会完成。但我应该考虑在每次向轨迹列表添加或删除轨迹时,都存储一个附加到轨迹列表的元值(这一过程对我来说似乎更复杂,因此我希望避免)

谢谢

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

方法是将自定义筛选器应用于WP_Query 您正在跑步。

add_filter(\'posts_clauses\', function ($clauses, $query) {
    global $wpdb;

    // only run the filter for a given query
    // do your checks and return early
    if (!$query->is_main_query() || !$query->is_post_type_archive(\'tracklist\')) {
        return $clauses;
    }

    $clauses[\'fields\'] .= ", COUNT(items.id) AS track_count";
    $clauses[\'join\'] .= " LEFT JOIN tracklist_items AS items ON {$wpdb->posts}.ID = items.tracklist_id";
    $clauses[\'groupby\'] = "{$wpdb->posts}.ID";
    $clauses[\'orderby\'] = "track_count DESC";

    return $clauses;
}, 2, 10);
另请参见https://stackoverflow.com/questions/20119901/counting-number-of-joined-rows-in-left-join

SO网友:Sanjay Gupta

Try this

function get_subtracks_count(){
  global $wpdb;
  if (!$this->post_id) return false;
  $querystr = $wpdb->prepare( "SELECT COUNT(*) FROM `tracklist_items` WHERE tracklist_id = %d", $this->post_id ORDER BY count(*) DESC);
  return $wpdb->get_var($querystr);
}

相关推荐

Countrywise Post View

我可以设置吗countrywise 发布视图?假设你来自俄罗斯,你只会看到来自俄罗斯的分类帖子,而另一个来自日本的用户,他只会在同一页上看到日本的帖子,可以证明是在主页上。我该怎么做?谢谢此外,如何设置随机帖子显示,而不是选择特定的帖子类别?这可能吗?