按贝叶斯评级订购数据库结果

nic*_*ass 5 php mysql database sorting sql-order-by

我不确定这是否可行,但在做"丑陋"的方式之前我需要确认:)

因此,"结果"是数据库中的帖子,存储方式如下:

  • posts表,包含所有重要的东西,比如ID,标题,内容
  • post元表,包含额外的帖子数据,如rating(this_rating)和投票数(this_num_votes).该数据成对存储,该表有3列:帖子ID /键/值.它基本上是WordPress表结构.

我想要的是取出评分最高的帖子,根据这个公式排序:

br =((avg_num_votes*avg_rating)+(this_num_votes*this_rating))/(avg_num_votes + this_num_votes)

我偷了这里的形式.

avg_num_votes并且avg_rating是已知变量(它们在每次投票时得到更新),因此不需要计算它们.

这可以用mysql查询完成吗?或者我是否需要获取所有帖子并使用PHP进行排序?

Utk*_*rım 2

数据堆栈交换链接:

https://data.stackexchange.com/stackoverflow/s/2137/order-database-results-by-bayesian- rating

SELECT id,title,( AVG(this_num_votes) * AVG(this_rating) + this_num_votes * this_rating )
     / ( AVG(this_num_votes) + this_num_votes ) as br
FROM posts
LEFT JOIN (
SELECT DISTINCT post_id,
(SELECT meta_value FROM postmeta WHERE postmeta.post_id = pm.post_id AND meta_key ='this_num_votes') as this_num_votes,
(SELECT meta_value FROM postmeta WHERE postmeta.post_id = pm.post_id AND meta_key ='this_rating') as this_rating
FROM postmeta pm ) as newmeta ON posts.ID = newmeta.post_id
GROUP BY id,title,this_num_votes,this_rating
ORDER BY br DESC
Run Code Online (Sandbox Code Playgroud)