ASP.NET按日期范围对多个SQL数据库表进行排序

时间:2018-07-25 15:15:39

标签: c# mysql asp.net sql-server asp.net-mvc

过去一周,我的任务是将基于PHP的数据库迁移到新的SQL数据库。有几个要求,但是其中一个要求是使用ASP.Net MVC连接到SQL数据库...而我从未使用过ASP.Net或MVC。

我已经成功地将数据库移至SQL,并且已经建立了ASP网站的基础(花了很多时间讲解了教程)。我现在遇到的问题是,其中一个页面旨在显示少数字段(User_Name,Work_Date,Work_Description,Work_Location等),但是获取所有这些字段的唯一方法是通过合并两个表。此外,我必须允许用户在组合表中搜索用户输入的日期范围之间的所有匹配行。

我尝试设置一个基本表来显示正确的字段并实现了搜索栏...但是这只允许我按单个日期而不是范围进行搜索。我还尝试使用GridView及其查询生成器功能来获取所需的数据字段(效果很好),但是我不知道如何将文本框/按钮附加到新制作的GridView上。将单个表与GridView一起使用非常有效,而使用文本框/按钮非常直观。我似乎无法通过联接视图建立相同的连接。

所以我想我的问题是:对我来说,合并这两个表的最佳方法是什么,同时还能对显示的数据执行搜索?如果我可以从头开始构建该数据库,我将只创建一个表,并在表上附加相关数据,但是由于该表是从先前创建的数据库派生而来的,因此我有12年以上的信息需要转储到该数据库中。 >

任何帮助将不胜感激。我有点死在这里的水中。我对这些系统的经验不足使我变得更好。我可以发布自己的代码,但是我主要对我的选择感兴趣,然后我可以自己进行研究。

谢谢!

1 个答案:

答案 0 :(得分:0)

由于需要猜测,很难为您的问题提供明确的答案。

但是这里有一些提示。

  1. 您可以说WHERE datestamp >= '2017-01-01' AND datestamp < '2018-01-01'来过滤2017日历年的所有行。可以使用这种日期范围过滤器的多种变体。
  2. 您的第一个表可能在每行上都有某种ID号。我们称之为first.first_id。您的第二张表可能有自己的ID,我们将其称为second.second_id。而且,它可能还有另一个标识,该标识标识您的第一个表中的一行,我们将其称为second.first_idsecond.first_id在第一个表的第二个表中称为外键。通过此外键,第二张表中可以有任意数量的行与第一张表相对应。

在这种情况下,您可以执行以下操作:

 SELECT first.datestamp, first.val1, first.val2, second.val1, second.val2
   FROM first
   JOIN second ON first.first_id = second.first_id
  WHERE first.datestamp >= '2018-06-01' AND first.datestamp < '2018-07-01'
    AND (first.val1 = 'some search term' OR second.val1 = 'some search term')
  ORDER BY first.datestamp

这通过将两个物理表(FROM...JOIN...)连接在一起来构成一个虚拟表。

然后,它从该虚拟表(FROM ...)中过滤出所需的行。

然后按所需顺序(ORDER BY...)放置它们。

最后,它从结果集中的虚拟表中选择所需的列(SELECT ...

SQL数据库服务器(MySQL,SQL Server,postgreSQL,Oracle和其他服务器)非常聪明,可以高效地完成这种事情。