我的搜索查询的运行,如:PHP MYSQL搜索
select * from posts p where p.post like '%test%' ORDER BY p.upvotes DESC,
p.unix_timestamp DESC LIMIT 20
如果有超过20个结果所搜索的关键词,我找出最低时间戳值,将其存储在一个隐藏的元素并运行另一个查询加载喜欢更多结果:
select * from posts p where p.post like '%test%' and p.unix_timestamp < 1360662045
ORDER BY p.upvotes DESC, p.unix_timestamp DESC LIMIT 20
请告诉我实际发生的是我的第一个查询忽略(很显然,我的失误),因为我ORDER BY p.upvotes DESC
的已经没有任何票(指0票)职位作为这个的结果,我注意到它提取了在前20个结果中表中的第一个帖子,所以最小时间戳成为第一个帖子的时间戳。在此之后,如果我尝试获取小于最小时间戳的下一个20个结果,它不会给出任何结果。
现在,我只是使用upvotes命令来获取最高记录。我应该使用贝叶斯平均法还是其他一些算法?
请告诉我如何改善查询,如果我不得不留在当前的订购系统或有任何可行的和更有效的方法,我应该使用?
P.S.如果可能的话,请参考一些有关贝叶斯平均值(似乎是最常用的)或其他替代方法的资源?
您的第一个查询不应忽略0 upvotes的帖子,但会开始显示所有帖子,包括0 upvotes的帖子,从具有最大upvotes的帖子开始。如果所有有upvotes 0它将按时间戳排序。我想念什么?附:您应该将已达到的upvotes值也存储在隐藏字段中,并将其传递给第二个查询。 – 2013-03-26 09:48:38
我不是一次性获取匹配搜索关键字的所有帖子,而是在大量20次的情况下进行匹配。因此,它忽略了第一个查询本身有0个upvotes的情况,以及一个情况下最小时间戳的情况的第一个20的结果是表中的第一个职位,因为在第二个查询中没有找到任何东西。 – coder101 2013-03-26 09:51:29
你的查询没有任何建议它会忽略0 upvotes。您提供的查询会显示它们 – 2013-03-26 09:54:05