我已经创建了以下wordpress查询,该输出正在对记录进行计数。但是,所有帖子也确实有一个名为betting_odds的meta_key,其中meta_value类似于2.05、3.30

如何将这个meta_key的平均值添加到以下查询中?

SELECT count(DISTINCT $wpdb->postmeta.`post_id`)
  FROM $wpdb->posts
       LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id)
       LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
       LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
 WHERE $wpdb->postmeta.meta_key       = 'betting_status'
    AND $wpdb->postmeta.meta_value    != 'Ikke afgjort'
    AND $wpdb->posts.post_status      = 'publish'
    AND $wpdb->term_taxonomy.taxonomy = 'category'
    AND $wpdb->term_taxonomy.term_id  = 106

最佳答案

当从像wp_postmeta这样的键/值存储中检索数据时,这是一个常见的挑战。

诀窍是将post_idmeta_key都放入ON子句中,就像这样。

(在WordPress查询中使用表别名(在本例中为postsstatodds等也很有帮助),因为它们更具可读性。

SELECT count(DISTINCT posts.ID), AVG(odds.meta_value)
  FROM $wpdb->posts posts
  LEFT JOIN $wpdb->postmeta stat
                 ON posts.ID = stat.post_id
                AND stat.meta_key = 'betting_status'
  LEFT JOIN $wpdb->postmeta odds
                 ON posts.ID = odds.post_id
                AND odds.meta_key = 'betting_odds'
  LEFT JOIN $wpdb->term_relationships tr ON posts.ID = tr.object_id
  LEFT JOIN $wpdb->term_taxonomy t ON tr.term_taxonomy_id = t.term_taxonomy_id
 WHERE stat.meta_value    != 'Ikke afgjort'
   AND posts.post_status      = 'publish'
   AND t.taxonomy = 'category'
   AND t.term_id  = 106


您是否看到我们如何两次对postmeta表进行LEFT JOIN,对于我们需要的每个元值一次?您是否看到meta_key匹配条件进入ON子句而不是进入WHERE子句的方式?这就是为帖子提取元值的模式。

关于php - 从wp中的元值获取平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27972435/

10-11 22:44