假设我有一个博客帖子表,其中有一个评级字段,表示帖子的质量。随机查找帖子的最有效方法是什么,返回高排名帖子的可能性更高?
我将在PHP,MySQL和Lucene中实现它。
答案 0 :(得分:3)
一个简单的解决方案是包含对RAND()
和rating
列的调用并将它们相乘:
SELECT title, content FROM blog_posts ORDER BY (rating + 1) * RAND() DESC LIMIT 1;
如果您发现这对评分较高的项目给予过多优先权,则可以使用SQRT
:
SELECT title, content FROM blog_posts ORDER BY SQRT(rating + 1) * RAND() DESC LIMIT 1;
答案 1 :(得分:2)
您可以使用“加权随机”排序,例如:
SELECT title, body FROM posts ORDER BY (score+1) * RAND() DESC LIMIT 5
+1允许选择0分的帖子。 根据您帖子的平均分数,您可能需要将分数乘以另一个常数因子(例如。0.5*score+1
)
根据您的得分分布,您可能希望转换得分,例如使用LOG(score)
或SQRT(score)
。
答案 2 :(得分:0)
SQL命令:
SELECT * FROM posts WHERE id = '$randomly_generated_ids' ORDER BY ratings ASC
例如 $ random_generated_ids 可以是“13,10,5,20”
详细信息:ORDER BY