ASP.NET 按日期范围对多个 SQL 数据库表进行排序
Posted
技术标签:
【中文标题】ASP.NET 按日期范围对多个 SQL 数据库表进行排序【英文标题】:ASP.NET Sorting Multiple SQL Database Tables By Date Range 【发布时间】:2019-01-02 11:32:09 【问题描述】:上周我的任务是将基于 php 的数据库迁移到新的 SQL 数据库。有一些要求,但其中之一是使用 ASP.Net MVC 连接到 SQL 数据库……而我从未使用过 ASP.Net 或 MVC。
我已经成功地将数据库迁移到 SQL 并建立了 ASP 站点的基础(在花费大量时间阅读教程之后)。我现在遇到的问题是其中一个页面旨在显示少数字段(User_Name、Work_Date、Work_Description、Work_Location 等),但获取所有这些字段的唯一方法是组合两个表。此外,我需要允许用户在组合表中搜索用户输入的日期范围之间的任何匹配行。
我尝试设置一个显示正确字段的基本表格,并实现了一个搜索栏……但这只允许我按单个日期搜索,而不是按范围搜索。我还尝试使用 GridView 及其 Query Builder 功能来获取我需要的数据字段(效果非常好),但我不知道如何将文本框/按钮附加到新制作的 GridView。使用带有 GridView 的单个表格可以完美地工作,并且使用文本框/按钮非常直观。我似乎无法与联合视图建立相同的联系。
所以我想我的问题是:在组合这两个表的同时还能对显示的数据执行搜索的最佳方式是什么?如果我可以从头开始构建这个数据库,我会制作一个附有相关数据的表格,但因为这是从以前制作的数据库中派生的,它有 12 年以上的信息需要转储到其中。
任何帮助将不胜感激。我有点死在水里了。我对这些系统的缺乏经验使我变得更好。我可以发布我拥有的代码,但我主要对我的选择感兴趣,然后我可以自己进行研究。
谢谢!
【问题讨论】:
欢迎来到 Stack Overflow。你的问题有点令人困惑。 PHP 数据库 是 mysql 数据库,还是其他?当您说您将其移至新的 SQL 数据库时,您是指 SQL Server 数据库还是其他什么?您可能会考虑显示您的表定义(SHOW CREATE TABLE something
的输出。请edit 您的问题提供更多详细信息。此外,您可能会发现阅读 SQL JOIN
操作很有帮助。谢谢!
查看本教程:youtube.com/… 特别是实体框架的部分,因此您可以立即将数据与他的相关表一起带来。
我收到了旧 PHP 数据库的 PHP 转储文件,必须将其转换为 MSSQL 数据库。感谢您发布教程。我一定会检查出来的。 :)
【参考方案1】:
由于需要猜测,因此很难为您的问题提供明确的答案。
但这里有一些提示。
-
您可以说
WHERE datestamp >= '2017-01-01' AND datestamp < '2018-01-01'
来过滤 2017 日历年中的所有行。此类日期范围过滤器有许多变体。
您的第一个表的每一行可能都有某种 ID 号。我们称之为first.first_id
。您的第二张表可能有自己的 id,我们称之为second.second_id
。而且,它可能还有另一个 id 来标识您的第一个表中的一行,我们称之为second.first_id
。 second.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 等)非常很聪明地可以高效地完成这类事情。
【讨论】:
这是一个很好的选择。根据客户的要求,我已正确显示该数据。现在我将研究如何实现用户输入,我会很高兴的。感谢您的回复!以上是关于ASP.NET 按日期范围对多个 SQL 数据库表进行排序的主要内容,如果未能解决你的问题,请参考以下文章
在 asp.net 中按日期过滤 DirectoryInfo 文件
使用 Athena / Presto 从多个表返回 SQL 数据,受 1 个表中的日期范围限制