我使用一个奇怪的SELECT查询来计算所有帖子评分的平均值(存储在wp_postmeta
) 对于某个用户。
我的查询基本上使用以下参数:
post_author = 1
和meta_key = \'rating\'
和meta_value != 0
.
这个查询本身工作得非常好,但这里是它变得复杂的地方。我需要添加一些例外。。。
meta_key = \'anonymous\'
和meta_value != \'true\'
还有另一个。。。
meta_key = \'original_author\'
和meta_value = \'\'
我只想检索rating
meta\\u值,因此使用$wpdb->postmeta.meta_value
.
总计3个meta_key
和meta_value
参数,只有一个meta_value
我真的想找回。事情变得越来越棘手。。。
请参见下面的我的代码:
// Example value
$user_id = 1;
// Calculate average post rating for user
$ratings_query = $wpdb->get_results(
$wpdb->prepare("
SELECT $wpdb->postmeta.meta_value
FROM $wpdb->postmeta
JOIN $wpdb->posts ON ($wpdb->postmeta.post_id = $wpdb->posts.id)
WHERE (
$wpdb->posts.post_author = %d AND
$wpdb->posts.post_type = \'post\' AND
$wpdb->posts.post_status = \'publish\' AND
$wpdb->postmeta.meta_key = \'rating\' AND
$wpdb->postmeta.meta_value != 0
AND
$wpdb->postmeta.meta_key = \'anonymous\' AND
$wpdb->postmeta.meta_value != \'true\'
AND
$wpdb->postmeta.meta_key = \'original_author\' AND
$wpdb->postmeta.meta_value = \'\')
", $user_id), ARRAY_N);
if ( $ratings_query ) {
$ratings_query = call_user_func_array(\'array_merge\', $ratings_query);
$average_rating = round(array_sum($ratings_query) / count($ratings_query), 1);
} else {
$average_rating = 0;
}