当前位置:  开发笔记 > 编程语言 > 正文

操作方法:排名搜索结果

如何解决《操作方法:排名搜索结果》经验,为你挑选了1个好方法。

我有一个webapp开发问题,我已经开发了一个解决方案,但我正在尝试找到可能解决我看到的一些性能问题的其他想法.

问题陈述:

用户输入多个关键字/令牌

应用程序搜索与令牌匹配的内容

每个令牌需要一个结果

即,如果一个条目有3个令牌,我需要输入id 3次

排名结果

为令牌匹配分配X点

根据点对条目ID进行排序

如果点值相同,请使用日期对结果进行排序

我希望能够做但却没有想到的是发送1个返回类似于in()的结果的查询,但是为每个选中的条目ID返回一个重复的条目id.

有没有比我正在做的更好的方法,使用多个单独的查询为每个令牌运行一个查询?如果是这样,实施这些最简单的方法是什么?

编辑
我已经对条目进行了标记,因此,例如,"see spot run"的条目ID为1,有三个标记,"see","spot","run",这些标记位于单独的标记表中,条目ID与它们相关,因此表格可能如下所示:

'see', 1 
'spot', 1 
'run', 1 
'run', 2 
'spot', 3 

Robin Barnes.. 6

您可以在MySQL中使用"UNION ALL"在一个查询中实现此功能.

只需循环遍历PHP中的标记,为每个标记创建一个UNION ALL:

例如,如果令牌是'x','y'和'z',您的查询可能看起来像这样

SELECT * FROM `entries` 
WHERE token like "%x%" union all 
    SELECT * FROM `entries` 
    WHERE token like "%y%" union all 
        SELECT * FROM `entries` 
        WHERE token like "%z%" ORDER BY score ect...

order子句应该作为一个整个结果集运行,这是你需要的.

在性能方面,它不会那么快(我猜),但是对于数据库而言,速度方面的主要开销通常是从PHP向数据库引擎发送查询并接收结果.使用这种技术,这只发生一次而不是每个令牌一次,因此性能会提高,我只是不知道它是否足够.



1> Robin Barnes..:

您可以在MySQL中使用"UNION ALL"在一个查询中实现此功能.

只需循环遍历PHP中的标记,为每个标记创建一个UNION ALL:

例如,如果令牌是'x','y'和'z',您的查询可能看起来像这样

SELECT * FROM `entries` 
WHERE token like "%x%" union all 
    SELECT * FROM `entries` 
    WHERE token like "%y%" union all 
        SELECT * FROM `entries` 
        WHERE token like "%z%" ORDER BY score ect...

order子句应该作为一个整个结果集运行,这是你需要的.

在性能方面,它不会那么快(我猜),但是对于数据库而言,速度方面的主要开销通常是从PHP向数据库引擎发送查询并接收结果.使用这种技术,这只发生一次而不是每个令牌一次,因此性能会提高,我只是不知道它是否足够.

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有