逐步查询MySQL数据库 - 最佳方法?

时间:2010-01-11 13:11:55

标签: php sql mysql database ajax

我正在构建一个使用PHP 5,MySQL 5和Javascript以及jQuery和AJAX的Web应用程序。

该应用程序是一个非常复杂的选择过程,具有多个下拉菜单,用户可以按任何顺序进行选择。下拉菜单中的每个选择都会提供更多选择标准,这将限制其他下拉菜单中的选择,最后给出有限的结果集。

我在客户端使用Javascript,AJAX连接到服务器和MySQL数据库上的PHP,想法是每次用户从下拉菜单中选择一些内容时,我发送一个AJAX请求来更新所有其他下拉菜单。设置完所有可能的参数后,将显示结果集。

(我确实希望在服务器端保留逻辑,原因有多种,因此使用AJAX。)

现在,我不确定为每个用户处理这种“迭代”过程的最佳方法是什么:

我有一个表格,其中包含每个选择产生的所有条件。由于每个下拉选择将产生一个集合,如果选择标准,我可以在服务器上存储查询字符串,为每个选择添加。然后我运行当前存储的查询字符串以找出每个下拉列表应该进入的内容,将该数据发送到客户端,然后存储查询以便以后添加更多条件,运行,发送等等... 然后我必须在服务器上为每个用户存储该查询字符串,可能在文本文件中。或者也许作为存储过程,请参见下文....

另一种方法是在完成选择时使用新条件运行查询,发送数据以更新下拉,然后将选择存储在我在等等上运行下一个查询的临时表中。所以然后临时表将为每个选择缩小,直到我显示结果。

该应用可以让多个用户同时工作,因此必须以某种方式通过Cookie /会话ID识别用户....(?)

在每个用户离开后,存储的查询或临时表必须消失......怎么样?

选择方法,添加越来越多的条件以从表中进行选择,允许进行复杂的选择计算:

  • 使用加入

  • 使用临时表越来越受限制,因为在添加新条件时会删除记录。

  • 使用子选择。

在每个用户的每个步骤之间保持正确的存储方法:

  • 将参数存储在服务器文件中,并将其插入到每个选择步骤的sql或存储过程中,对每个步骤对整个数据库执行新查询,但每次都添加更多条件。

  • 将sql查询存储在文件中,并为每个步骤扩展它....

  • 在表/字段中存储SQL查询.....

  • 将sql查询存储在存储过程中.....

  • 将每个用户的先前选择的实际有限结果集存储在temopary表中,随着每一步删除越来越多的记录,该表将越来越小。

  • 在会话期间将参数存储在客户端,将所有参数重新发送到服务器以进行每次选择

有人可以帮忙做出这个决定吗?

RGDS PM

1 个答案:

答案 0 :(得分:1)

我建议的最佳方法是每次用户更改下拉框中的值时运行不同的查询。如果您有5个下拉框,当用户更改第一个框中的值时,您将从AJAX页面运行查询:

SELECT * FROM table WHERE val1 = x;

然后,一旦用户决定更改另一个值,您就可以运行更窄的查询,例如

SELECT * FROM table WHERE val1 = x AND val2 = y;

然后,您可以重复此过程,直到所有下拉框都已更改。

至于使用临时表或存储过程。我想说这可能不是你想要实现的目的所必需的,而且很可能只会给项目增加不必要的复杂性。

如果您知道需要从前端检查哪些字段,那么您应该只将选定的值从下拉框发送到AJAX页面,以便它可以决定需要运行哪些查询并返回结果(XML / JSON对此非常有用)。

相关问题