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

标签 php sql mysql database ajax

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

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

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

(出于各种原因,我确实希望将逻辑保留在服务器端,因此使用了 AJAX。)

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

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

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

该应用程序可以有多个用户同时工作,因此可能必须以某种方式通过 cookie/ session ID 来识别用户....(?)

当每个用户离开一段时间后,存储的查询或临时表必须消失......怎么办?

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

  • 使用连接

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

  • 使用子选择。

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

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

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

  • 在表/字段中存储一个 sql 查询......

  • 在存储过程中存储一个 sql 查询......

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

  • 在 session 期间将参数存储在客户端,每次选择都将它们全部重新发送到服务器

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

Rgds 下午

最佳答案

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

SELECT * FROM table WHERE val1 = x;

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

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

然后你可以重复这个过程,直到所有的下拉框都被更改。

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

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

关于php - 逐步查询 MySQL 数据库 - 最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2041995/

相关文章:

java - 在 Hibernate 中提取 *HQL*

php - 尝试将双引号表单数据库打印到输入字段中

php - 将 groupBy() 与 orderBy() 和 limit() 一起使用

php - Mysql关系一对多获取数据多where子句

php - include() 和在 PHP 中调用函数有什么区别?

php - 使用jquery无法获取php循环中的所有id

iphone - 如何将文字文本绑定(bind)到 SQLite 查询?

android - 使用android将数据保存到MySQL数据库

php - 为 Zizaco/confide 添加额外字段会导致错误

php - 如何在 Laravel 中通过 join 将一对多关系分组