我目前在一家社交网站工作。
我的老板最近想到了随机显示搜索结果而不是正常结果(注册日期)的想法。这样做的问题简单明了:如果您从一页转到另一页,每次都会显示不同的结果,因为列表每次都是随机的。
我想到了将结果存储在数据库+cookie 中,如下所示:
- 包含 $_POST 请求序列化版本的 Cookie(如果我们想要重新排序则需要)
- 将作为搜索基础的表 id => searches (id,user
_id, creation
_date) - 存储结果及其顺序的表 => searches
_results (search_id, order, user
_id)
流程图看起来像这样:
- 每次搜索后,我都会将“位置”存储到 cookie 或 session 中
- 然后我在“搜索”中删除之前的搜索
- 然后我删除“searches_results”中以前的结果
- 然后我在“搜索”键中插入一行
- 然后我将每个用户行插入“searches_results”
- 最后我将用户重定向到类似 ?search_id=[search_key] 的地方
这里有一个很大的缺陷:性能....绝对有可能使系统或宕机或非常慢。
知道什么是最好的结构吗?
最佳答案
如果您不是随机排序,而是通过某个顺序已知且可重复但不明显的函数进行排序,该怎么办?您可以使用搜索查询中的一些数据为这样的函数做种子,以使其重复变得更加不明显。这样,您可以在结果中来回翻页,并始终获得您期望的结果。音乐播放器将这种功能用于其随机播放功能(因此,如果您单击后退,则会播放上一首歌曲,如果您再次单击下一首,则会回到起点)。我相信您可以预知一些功能来完成此... bitwise XORing具有某些常量(来自查询)的 ID 值,然后按结果数排序可能就足够了。我随意选择了 XOR,因为它是一个非常简单的函数,可以为您提供可重复且不明显的结果。
关于php - 保存搜索结果的数据库结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/467075/