【问题标题】:Filter data from Several Tables and insert into a temp table从几个表中过滤数据并插入到临时表中
【发布时间】:2015-05-04 03:42:18
【问题描述】:

假设我们在几个表中有电子邮件广播所需的数据,我们需要将不同表中的一些常见字段信息(如(姓名、电子邮件))用于电子邮件广播的临时表等。 表格示例 EmployeeStudentClassParents 表等

假设我们需要为不同的场景发送电子邮件

  1. 所有学生
  2. 仅限 5 年级学生
  3. 仅限员工
  4. 仅限父母
  5. 员工、父母
  6. 仅限 3 年级、5 年级、6 年级学生

我们可以有几种组合。我一直在考虑这个,搜索了类似的例子,但找不到任何相关的例子。

示例表结构

Employee/Teacher (ID, Name, Email, Phone..)
Student (ID,Name,Email,Phone..)
Class(ID,ClassName)
Subject (ID, SubjectName, GradeID)
Parent(ID,Name,Email,Phone...)

我会很感激我们不能采取的指针或方法,最大的问题是如何为此生成动态查询,以便可以选择来自不同表的相关数据来发送电子邮件通知或提示等。

【问题讨论】:

  • 我认为这个问题需要更多细节才能提供真正有用的帮助。你为什么使用临时表?您是否打算一次查询表格集合以收集电子邮件收件人列表?您可以为不同类型的收件人运行单独的查询吗?当您说动态查询时,您是指动态SQL吗?动态 SQL 是必需的吗?
  • 这么多不相关的标签。
  • @DCaugs,如果我可以根据用户选择生成动态查询,我可能不需要临时表。选择可能会不时变化,我可能没有解释清楚。简而言之,我想知道我们如何根据问题中提到的场景从不同的表格中获取电子邮件、姓名、电话号码。
  • @Kritner,我实际上需要这个用于 asp.net mvc 项目,我还想包括 php 用户,因为他们还可以指出我从不同表中选择数据的逻辑

标签: php html sql asp.net sql-server


【解决方案1】:

这实际上归结为应用程序架构而不是数据结构,尽管从这些表的外观来看,您也可以改进数据结构。

最终,您为最终用户提供了访问数据的选项。在将请求发送到数据库表之前,您需要在前端尽可能缩小他们的选择范围。您提出的最终请求越窄,您的数据库查询就越简单。

构建多个动态 SQL 查询可能是一种选择。这在最初更难处理,但很可能在每次调用它们时都会获得最有效、最窄的执行计划。

调用以表为中心的存储过程将是另一种方法 - 例如用户在前端请求所有教师和所有父电子邮件地址,然后使用适当的参数调用以教师表为中心的 proc 和单独的以父表为中心的 proc,并将数据返回到前端。

归根结底,如果可能的话,简化你的数据结构(将用户组合到一个用户表中,而不是跨多个表的多个用户类型数据的冗余存储。更多关于数据库中的范式here),缩小前端查询的灵活性尽可能实用,并准备好在您发现与您的初始查询设计不一致的最终用户访问模式时进行调整和调整。

不幸的是,变量很多,没有灵丹妙药。话虽如此,确定您要解决的具体问题,然后问自己为什么这是一个问题,这将使您走得很远一个解法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多