【问题标题】:Removing the Previous Record of same "KeyWord" pattern删除相同“关键字”模式的先前记录
【发布时间】:2016-04-28 19:44:07
【问题描述】:

我有一个带有后端 PHP 和 mysql 的 android 应用 搜索功能

目前用户按键我正在向服务器发送请求以获取数据。 (现场建议)。

每次按键我都会将用户输入插入服务器。

问题到了最后,由于以下冗余数据,查看用户搜索内容的统计数据非常困难。

用户搜索:Apple 移动端在每次按键时向服务器发送请求,如下所示

  1. 一个
  2. 应用
  3. 应用
  4. 应用
  5. Apple

问题是:如何从mysql中删除记录[1到4]只保留[5]

注意:在移动应用中保持相同的实时搜索(按按键)功能。

其他说明: 应用正在使用 REST API 通过 HTTP POST 发送数据 一次有 1000 名用户可以搜索该应用程序。 [上一条上一条记录可能并不总是同一查询的一部分]

我通过发送一个长度为 12 个字符的唯一键以及搜索查询解决了这个问题,在一天结束时,我通过保留每个键的最新记录来清理查询

【问题讨论】:

  • 解决方案1:实际字符串如 apple 的记录很难找到,但可以在一天结束时删除长度小于 3 个字符的记录。这样,您可能会获得更少的冗余数据。解决方案 2:使用此按键检查是用户按下 enter 键,然后仅向服务器发送请求以根据关键字搜索记录。输入键 keycode 是 13。
  • 您可以使用 onblur 事件将记录存储在数据库中...如果用户离开搜索字段然后获取文本框的值并存储在数据库中
  • 您可以为数据库中的每个按键添加时间戳,并获取最新的跳过所有其他按键 -- stackoverflow.com/questions/11912221/… -- 或使用相同的方法删除除最后一个以外的所有按键
  • @AlankarMore 对于解决方案 1,我将放弃 10% 的 3 个字符的搜索。但是很好的建议。对于解决方案 2:我正在使用移动应用程序及其实时搜索。我们希望用户看到实时建议。

标签: php android mysql


【解决方案1】:

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

假设最终用户正在搜索“Apple 6s”一词。 现在假设他输入了关键字“A” 现在根据您当前的逻辑,您正在请求后端服务器将此术语保存在数据库中。

假设您的用户搜索词保存表名称截至目前为“user_searches”。因此,默认情况下,此表为空。当用户键入关键字“A”时,记录将插入到此表中,id(主键)为 1。

在用户下次尝试键入关键字“p”时,请求将发送到带有字符串“Ap.”的服务器 您没有将其保存为新记录,而是将更新已使用字符串“A”保存的先前记录。 所以记录 id 1 的新值是 'Ap'

除非字符串中存在空格,否则您需要更新记录 id 1。因此,一旦您收到字符串中的空格,您必须在数据库中插入新的或在我们的例子中为第二条记录,id 为 2。 因此,根据这个逻辑,如果用户键入字符串为“Apple 6s”,您将在数据库中获得如下记录

id search_terms 1 苹果 2 6s

因此,每当您在数据库中插入记录时,您都必须在响应中发送记录的最新 ID。

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

希望这会对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2023-01-21
    • 1970-01-01
    相关资源
    最近更新 更多