Получение среднего числа из мета-значения в wp

Я создал следующий запрос WordPress, который вывод, который считает записи. Однако у всех сообщений также есть meta_key с именем betting_odds, где 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

0

Решение

Это общая проблема при извлечении данных из хранилища ключей / значений, например wp_postmeta,

Хитрость заключается в том, чтобы post_id и meta_key в ON оговорка, вроде так.

(Также полезно использовать псевдонимы таблиц (в этом случае posts, stat, oddsи т. д.) в запросах WordPress, потому что они становятся немного более читабельными.

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

Вы видите, как мы LEFT JOINдва раза в таблицу postmeta, по одному разу для каждого мета-значения? Вы видите, как meta_key критерий соответствия входит в ON пункт, а не WHERE статья? Это шаблон для извлечения мета-значений для постов.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]