首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在数据库中进行搜索的最有效方法

在数据库中进行搜索的最有效方法
EN

Stack Overflow用户
提问于 2016-01-05 16:26:28
回答 2查看 43关注 0票数 1

我有一个表单页面,然后在表单中有电话号码,年龄,邮政编码字段,我有一个生成按钮。当用户生成按钮时,我将自动填充表单中的问题。这些问题是调查问题,并要求一些条件,无论我是否会在表格中显示它。

我可以做所有的逻辑。我的问题是处理这个验证的最好方法,我将对此进行解释。

我和id, question, column_header有一张Questions桌子。

我和id, phone, column_header有一张Suppressions桌子。

验证是,如果表单中的电话号码与列标题名称一起出现在抑制表中,则在单击generate按钮时不应显示该问题。

例如。

代码语言:javascript
运行
复制
Questions
id | question | column_header|
___|__________|______________|
1  | test1    | ques1

Suppression
id | phone | column_header |
___|_______|_______________|
1  | 1234  | ques1

例如,表单中的电话号码是1234,然后单击generate按钮,我的jQuery和Ajax将处理此问题。我将在每个问题中循环,对于每个问题,我将在Suppression表中查询当前问题列标题是否已经与电话号码一起存在于该表中,如果存在,则不会启用或显示该问题。

这将完成工作,我担心的是,如果隐藏表像数百万条记录一样增长,而我有30个问题。因此,对于每个问题,我现在需要在抑制表中的百万条记录中进行搜索,以便在需要禁用或启用问题时找到匹配项,而且每次ajax调用的过程都会很慢。

有没有更好的方法来做这件事?我使用PHP Laravel和Postgre作为我的数据库。

EN

回答 2

Stack Overflow用户

发布于 2016-01-05 16:34:35

数百万条记录对RDBMS来说不算什么。您可以在主SQL语句中使用子查询来查询Suppresion表。您的子查询在过滤phonecolumn_header之后返回count(*)。然后检查子查询的结果是否为零。只有当子查询的值为零时,才能在Questions表中匹配主SQL。

示例:select * from Questions where column_header="yyy" 0=(select count(*) from Suppresion where phone="xxx" and column_header="yyy")

票数 0
EN

Stack Overflow用户

发布于 2016-01-05 16:43:10

正如tcak指出的那样,数百万条记录对于现代数据库来说不是问题,但是它仍然有助于思考你是如何访问你的数据的。

即使没有数百万条记录,你计划的也是非常低效的,即使使用一个很小的数据库,网络流量也可能会使你的应用程序变慢。

相反,既然你知道加载页面上的电话号码,为什么不加载特定电话号码的所有问题,并将该信息保留在页面上,当用户单击一行时,您可以查看浏览器信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34607143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档