我有一个表单页面然后在表单中有电话号码,年龄,邮政编码字段,我有一个生成按钮。当用户生成按钮时,我将自动填充表单中的问题。这些问题是调查问题,需要一些条件,我是否会在表格中显示。
我可以做所有的逻辑。我的问题是我将要解释的最佳方法。
我有Questions
表{。}}。
我有id, question, column_header
表{。}}。
验证是表单中的电话号码是否已经在抑制表中以及列标题名称时,单击生成按钮时不应显示该问题。
实施例
Suppressions
例如,表单中的电话号码为id, phone, column_header
,然后单击生成按钮,我的jQuery和Ajax将处理此问题。我将在每个问题中循环,对于每个问题,我将在Questions
id | question | column_header|
___|__________|______________|
1 | test1 | ques1
Suppression
id | phone | column_header |
___|_______|_______________|
1 | 1234 | ques1
表中查询当前问题列标题是否已与该电话号码一起存在于该表中,如果确实如此,那么我将不会启用或显示问题。
那将完成这项工作,我担心的是,如果抑制表像数百万条记录一样增长,我有30个问题。因此,对于每个问题,我现在需要搜索抑制表中的百万条记录,以便找到匹配项,如果我需要禁用或启用问题,并且每个ajax调用的进程将会很慢。
有更好的方法吗?我使用PHP Laravel和Postgre作为我的数据库。
答案 0 :(得分:0)
数百万条记录对RDBMS来说毫无意义。在主SQL语句中使用子查询来查询Suppresion表。过滤count(*)
和phone
后,子查询会返回column_header
。然后检查子查询的结果是否为零。只有当子查询的值为零时,才会在Questions
表中匹配主SQL。
实施例:
select * from Questions where column_header="yyy" 0=(select count(*) from Suppresion where phone="xxx" and column_header="yyy")
答案 1 :(得分:0)
正如tcak指出的那样,数百万条记录对现代数据库来说不是问题,但是考虑如何访问数据仍然有助于思考。
即使没有数百万条记录,您计划的内容也是非常低效的,即使使用小型数据库,网络流量也可能会使您的应用变慢。
相反,由于您知道页面加载时的电话号码,为什么不加载特定电话号码的所有问题并在页面上保留该信息,当您的用户点击一行时,您可以检查您的inbrowser信息。