我有一个webapp开发问题,我已经开发了一个解决方案,但我正在尝试找到可能解决我看到的一些性能问题的其他想法.
问题陈述:
我希望能够做但却没有想到的是发送1个返回类似于in()的结果的查询,但是为每个选中的条目ID返回一个重复的条目id.
有没有比我正在做的更好的方法,使用多个单独的查询为每个令牌运行一个查询?如果是这样,实施这些最简单的方法是什么?
编辑
我已经对条目进行了标记,因此,例如,"see spot run"的条目ID为1,有三个标记,"see","spot","run",这些标记位于单独的标记表中,条目ID与它们相关,因此表格可能如下所示:
'see', 1
'spot', 1
'run', 1
'run', 2
'spot', 3
Run Code Online (Sandbox Code Playgroud)
您可以在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...
Run Code Online (Sandbox Code Playgroud)
order子句应该作为一个整个结果集运行,这是你需要的.
在性能方面,它不会那么快(我猜),但是对于数据库而言,速度方面的主要开销通常是从PHP向数据库引擎发送查询并接收结果.使用这种技术,这只发生一次而不是每个令牌一次,因此性能会提高,我只是不知道它是否足够.
| 归档时间: |
|
| 查看次数: |
4110 次 |
| 最近记录: |