我有一个表单页面,然后在表单中有电话号码,年龄,邮政编码字段,我有一个生成按钮。当用户生成按钮时,我将自动填充表单中的问题。这些问题是调查问题,并要求一些条件,无论我是否会在表格中显示它。
我可以做所有的逻辑。我的问题是处理这个验证的最好方法,我将对此进行解释。
我和id, question, column_header
有一张Questions
桌子。
我和id, phone, column_header
有一张Suppressions
桌子。
验证是,如果表单中的电话号码与列标题名称一起出现在抑制表中,则在单击generate按钮时不应显示该问题。
例如。
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作为我的数据库。
发布于 2016-01-05 08:34:35
数百万条记录对RDBMS来说不算什么。您可以在主SQL语句中使用子查询来查询Suppresion表。您的子查询在过滤phone
和column_header
之后返回count(*)
。然后检查子查询的结果是否为零。只有当子查询的值为零时,才能在Questions
表中匹配主SQL。
示例:select * from Questions where column_header="yyy" 0=(select count(*) from Suppresion where phone="xxx" and column_header="yyy")
发布于 2016-01-05 08:43:10
正如tcak指出的那样,数百万条记录对于现代数据库来说不是问题,但是它仍然有助于思考你是如何访问你的数据的。
即使没有数百万条记录,你计划的也是非常低效的,即使使用一个很小的数据库,网络流量也可能会使你的应用程序变慢。
相反,既然你知道加载页面上的电话号码,为什么不加载特定电话号码的所有问题,并将该信息保留在页面上,当用户单击一行时,您可以查看浏览器信息。
https://stackoverflow.com/questions/34607143
复制