我已经创建了以下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_id
和meta_key
都放入ON
子句中,就像这样。
(在WordPress查询中使用表别名(在本例中为posts
,stat
,odds
等也很有帮助),因为它们更具可读性。
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/