INNER JOIN跳过具有相同值的键

时间:2014-10-15 09:06:31

标签: php mysql sql wordpress

我正在尝试过滤我的next_post_linkprevious_post_link,因此可以在名为filmfremvisning的自定义帖子类型上使用,其中meta_key字段包含日期。 filmfremvisning CPT是某种"事件" CPT,其中活动帖子的截止日期。到期日期的格式为YYYYMMDD,名称为dato_for_fremvisningen

我还有一个名为expired的自定义帖子状态和一个cronjob,它每晚都会为所有过期的帖子提供状态。

我试过这两个链接:

我的工作非常好。但问题是INNER JOIN正在跳过具有相同日期的帖子。

例如,如果我有以下帖子和日期:

  • 活动1 - 20140102
  • 活动2 - 20140105
  • 活动3 - 20140105
  • 活动4 - 20140107

它返回:

  • 活动1 - 20140102
  • 活动2 - 20140105
  • 活动4 - 20140107

SQL语句适用于以下帖子:

INNER JOIN $wpdb->postmeta AS m ON p.ID = m.post_id 
WHERE p.post_type = 'filmfremvisning' 
  AND p.post_status = 'publish' 
  AND m.meta_key = 'dato_for_fremvisningen' 
  AND m.meta_value > '$current_filmfremvisning_date' 
GROUP BY p.ID ORDER BY m.meta_value ASC`

我在functions.php中使用的代码如下:

function get_adjacent_past_events_join($join) {
  if(is_singular('filmfremvisning')) {
    global $wpdb;
    $new_join = $join."INNER JOIN $wpdb->postmeta AS m ON p.ID = m.post_id ";
    return $new_join;
  }
  return $join;
}
add_filter('get_previous_post_join', 'get_adjacent_past_events_join');
add_filter('get_next_post_join', 'get_adjacent_past_events_join');


function get_future_filmfremvisnings_where($where) {
  if(is_singular('filmfremvisning')) {
    global $wpdb, $post;
    $id = $post->ID;
    $current_filmfremvisning_date = get_field('dato_for_fremvisningen', $id);
    $new_where = "WHERE p.post_type = 'filmfremvisning' AND p.post_status = 'publish' AND m.meta_key = 'dato_for_fremvisningen' AND m.meta_value > '$current_filmfremvisning_date'";
    return $new_where;
  }
  return $where;
}
add_filter('get_next_post_where', 'get_future_filmfremvisnings_where');


function get_past_filmfremvisnings_where($where) {
  if(is_singular('filmfremvisning')) {
    global $wpdb, $post;
    $id = $post->ID;
    $current_filmfremvisning_date = get_field('dato_for_fremvisningen', $id);
    $new_where = "WHERE p.post_type = 'filmfremvisning' AND p.post_status = 'publish' AND m.meta_key = 'dato_for_fremvisningen' AND m.meta_value < '$current_filmfremvisning_date'";
    return $new_where;
  }
  return $where;
}
add_filter('get_previous_post_where', 'get_past_filmfremvisnings_where');


function get_prev_past_filmfremvisnings_sort($sort) {
  if(is_singular('filmfremvisning')) {
    global $wpdb;
    $new_sort = " GROUP BY p.ID ORDER BY m.meta_value DESC";
    return $new_sort;
  }
  return $sort;
}
add_filter('get_previous_post_sort', 'get_prev_past_filmfremvisnings_sort');


function get_next_future_filmfremvisnings_sort($sort) {
  if(is_singular('filmfremvisning')) {
    global $wpdb;
    $new_sort = " GROUP BY p.ID ORDER BY m.meta_value ASC";
    return $new_sort;
  }
  return $sort;
}
add_filter('get_next_post_sort', 'get_next_future_filmfremvisnings_sort');

0 个答案:

没有答案