我的搜索查詢的運行,如: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