Php 用于保存搜索结果的数据库结构

Php 用于保存搜索结果的数据库结构,php,mysql,data-structures,Php,Mysql,Data Structures,我目前在一家社交网站工作 我的老板最近有了一个想法,用随机的方式来显示搜索结果,而不是普通的结果(注册日期)。问题很简单也很明显:如果你从一个页面转到另一个页面,每次都会显示不同的结果,因为每次列表都是随机的 我的想法是将结果存储在数据库+cookies中,如下所示: 包含$\u POST请求的序列化版本的Cookie(如果要重新排序,则需要) 作为搜索id=>搜索基础的表(id、用户id、创建日期) 存储结果及其顺序的表=>搜索\u结果(搜索id、顺序、用户id) 流程图如下所示: 每次

我目前在一家社交网站工作

我的老板最近有了一个想法,用随机的方式来显示搜索结果,而不是普通的结果(注册日期)。问题很简单也很明显:如果你从一个页面转到另一个页面,每次都会显示不同的结果,因为每次列表都是随机的

我的想法是将结果存储在数据库+cookies中,如下所示:

  • 包含$\u POST请求的序列化版本的Cookie(如果要重新排序,则需要)
  • 作为搜索id=>搜索基础的表(id、用户id、创建日期)
  • 存储结果及其顺序的表=>搜索
    \u结果(搜索id、顺序、用户id)
流程图如下所示:

  • 每次搜索后,我将“where”存储到cookie或会话中
  • 然后我删除“搜索”中的上一个搜索
  • 然后我删除“搜索结果”中以前的结果
  • 然后,我在“搜索”中插入一行以查找密钥
  • 然后我将每个用户行插入“搜索结果”
  • 最后,我将用户重定向到类似的东西?search\u id=[search\u key]
这里有一个很大的缺陷:表演。。。。完全有可能使系统停机或非常慢


你知道什么是最好的结构吗?

如果你不是随机排序,而是通过某个函数排序,该函数的顺序是已知的、可重复的,只是不明显的?您可以使用搜索查询中的一些数据为这样一个函数设置种子,以使其重复性更不明显。通过这种方式,你可以来回翻阅你的结果,总是得到你想要的。音乐播放器将这种功能用于其随机播放功能(因此,如果单击“上一步”,您将获得上一首歌曲,如果再次单击“下一步”,您将回到开始的位置)。我相信你可以预言一些功能来完成这个。。。ID值带有一些常量(来自查询),然后按结果数字排序可能就足够了。我任意选择XOR,因为它是一个非常简单的函数,可以得到可重复且不明显的结果。

如果不是随机排序,而是按照某个顺序已知且可重复的函数排序,只是不明显?您可以使用搜索查询中的一些数据为这样一个函数设置种子,以使其重复性更不明显。通过这种方式,你可以来回翻阅你的结果,总是得到你想要的。音乐播放器将这种功能用于其随机播放功能(因此,如果单击“上一步”,您将获得上一首歌曲,如果再次单击“下一步”,您将回到开始的位置)。我相信你可以预言一些功能来完成这个。。。ID值带有一些常量(来自查询),然后按结果数字排序可能就足够了。我任意选择了XOR,因为它是一个非常简单的函数,可以得到可重复且不明显的结果。

嗯,可能吧,但XOR操作符不是只说它是一个或独占的吗?我的意思是,据我所知,这里没有数学运算。

嗯,可能吧,但异或运算符不是只说明它是一个或唯一的吗?我的意思是,据我所知,这里没有数学运算。

对不起,我知道这没用,但我不明白你的老板为什么想要这个

我知道,如果我在社交网络上搜索一个人,那么我只希望结果按相关性和相关性排序。我认为随机结果会让用户感到沮丧,但也许那只是我自己


例如,如果我搜索“John Smith”,那么第一批结果最好是名为“John Smith”的人。然后在结果末尾显示类似的名称。我不想搜索“John Smith”并获得“Jon Smithers”作为我的第二个结果。

对不起,我知道这没用,但我不明白为什么你的老板会想要这个

我知道,如果我在社交网络上搜索一个人,那么我只希望结果按相关性和相关性排序。我认为随机结果会让用户感到沮丧,但也许那只是我自己


例如,如果我搜索“John Smith”,那么第一批结果最好是名为“John Smith”的人。然后在结果末尾显示类似的名称。我不想搜索“约翰·史密斯”并得到“乔恩·史密斯”作为我的第二个结果。

好吧,我同意马特的说法,问“为什么?”

我认为Rmador也有一个很好的建议。您可以按不同的字段或某种算法随机排序。仅根据上次更新的DESC/ASC或其他结果字段的排列

另一种选择是第一次进行初始搜索,只返回相关ID,然后将完整ID的字符串存储在数据库中,随后的每个页面都是对这些ID的查找

我的两分钱


我可以看到一个场景,其中随机结果集很有用,但不是用于搜索,而是用于浏览个人资料、艺术家或本地事件。它为那些在传统的定向搜索中不会出现的人提供了更多的曝光机会。

好吧,我同意马特的说法,他问“为什么?”

我认为Rmador也有一个很好的建议。您可以按不同的字段或某种算法随机排序。仅根据上次更新的DESC/ASC或其他结果字段的排列

另一种选择是第一次进行初始搜索,只返回相关ID,然后将完整ID的字符串存储在数据库中,随后的每个页面都是对这些ID的查找

我的两分钱

我可以看到一个场景,其中随机结果集很有用,但不是用于搜索,而是用于浏览个人资料、艺术家或本地事件。它为那些不会出现在tr中的人提供了更多的曝光机会