2016-01-22 46 views
0

的上一记录我与后端PHP MySQL的& 一个Android的应用程序搜索功能删除相同的“关键词”模式

当前on user keypress我正在向请求数据的服务器发送请求。 (现场建议)。

随着每一个按键,我将用户输入到服务器。

问题是在一天结束时,看到的是什么用户搜索是非常困难的,因为冗余数据如下喜欢的统计数据。

用户搜索:Apple 移动发送在每个按键请求到服务器如下

  1. 应用
  2. 申请
  3. Apple

的问题是:如何从MySQL 删除记录[1〜4],只保留[5]

注:保持同样的实时搜索(启用按键)功能的移动应用。

enter image description here

其他注意事项: 应用程序使用REST API通过HTTP POST 发送数据在一个时间1000的用户可以搜索应用程序。 [前次的记录可能并不总是相同查询的一部分]

+1

解决方案1:真的很难找到具有实际字符串的记录,例如苹果,但是可以在一天结束时删除长度小于3个字符的记录。通过这个,你可以获得更少的冗余数据。 解决方案2:通过此按键检查用户是否按下**输入**键,然后仅将请求发送到服务器以根据关键字搜索记录。 对于输入密钥的密码是13. –

+0

你可以使用onblur事件来存储数据库中的记录...如果用户离开搜索字段,然后获取文本框的值,并存储在数据库中 –

+0

你可以添加一个时间戳到db中的每个按键,获取最新的跳过所有其余的内容 - http://stackoverflow.com/questions/11912221/mysql-select-by-newest-timestamp - 或使用相同的方法删除除最后一个之外的所有文件 – Tasos

回答

0

它可以通过在数据库中保存的冗余数据,帮助你。 假设您最初在数据库中没有任何记录用于实时搜索。

假设最终用户搜索术语“苹果6S”。 现在让我们说,他已键入关键字“A” 现在根据您当前的逻辑您请求后端服务器保存在数据库中的这个词。

比方说,您的用户搜索字词保存表名称是“user_searches”截至目前。所以,默认情况下这个表是空的。当用户类型的记录将在此表中插入与ID(主键)的关键字是“甲” 1

在下次尝试当用户键入关键词为“p”再次请求将用字符串'Ap。发送到服务器。' 您不是将它保存为新记录,而是更新之前用字符串'A'保存的记录。 所以记录ID 1 新值“鸭”

你需要除非及直至空间是存在的字符串中更新记录id 1。所以,一旦你收到字符串中的空间,你必须插入新的或在我们的情况下第二个记录在ID为2的数据库中。 因此,根据这种逻辑,如果用户正在键入数据库中的记录一个字符串为“苹果6S”

ID SEARCH_TERMS 1苹果 2 6S

所以每当你在数据库中插入记录,你将不得不发送记录的最新ID的响应。

你必须考虑如果用户A搜索术语“苹果”,那么最初这个用户将有记录ID为1 ,同时如果用户B也搜索术语“诺基亚”,那么它将有记录id 2用于更新。 因此,您必须根据设备ID跟踪搜索条件。为此,您可以在user_searches表中添加一列作为“deviceId”,以便您轻松跟踪各个设备搜索条件。

希望这可以帮助你。