Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要递归查找。DB与C GUI_C#_Sql_Database_Recursion_Recursive Query - Fatal编程技术网

C# 需要递归查找。DB与C GUI

C# 需要递归查找。DB与C GUI,c#,sql,database,recursion,recursive-query,C#,Sql,Database,Recursion,Recursive Query,我目前有一个计划,我想在表格中列出“支持票” 票证来自票务系统的SQL DB 票证有一个活动,例如: 我有一个功能齐全的设计,但在列出以下内容时遇到了问题: 在我的程序中,我想做的是列出家长票,并将他们的孩子票作为孩子详细信息。然而,随着复杂性的增加,我不得不递归地这样做 例如: 我的问题是: 在这种情况下,递归查找是在DB级别进行的吗?还是应用程序级别 我是否有义务做到这一点,循环检查每张车票的所有车票 这些查找如何影响性能 我做了一些研究,并试图单独获得门票,但没有达到这一点。我在DB级别

我目前有一个计划,我想在表格中列出“支持票”

票证来自票务系统的SQL DB

票证有一个活动,例如:

我有一个功能齐全的设计,但在列出以下内容时遇到了问题:

在我的程序中,我想做的是列出家长票,并将他们的孩子票作为孩子详细信息。然而,随着复杂性的增加,我不得不递归地这样做

例如:

我的问题是:

在这种情况下,递归查找是在DB级别进行的吗?还是应用程序级别

我是否有义务做到这一点,循环检查每张车票的所有车票

这些查找如何影响性能

我做了一些研究,并试图单独获得门票,但没有达到这一点。我在DB级别上使用以下方法进行了尝试:

SELECT ticketID,
FROM dbo.Ticket
UNION ALL

SELECT a.ticketID, 
FROM dbo.Ticket a 
INNER JOIN dbo.ticket s ON a.ticketID = s.ticketID 

SELECT * FROM Ticket 
where ticketID = 1
当我测试这个时,我有一个想法,也许我做得不对,因为也许递归搜索最好在我的应用程序级别进行,在这个级别中,我只需要在我的数据库中执行一个简单的select*from票证


这是真的吗?我是否需要在应用程序级别执行此操作?

我不确定这是否是最佳方法,但我会编写一个存储过程,让它在数据库级别获取所有相关票据。我的意思是,你可以很容易地让一个存储过程循环,直到它得到一个特定票证的所有孩子/父母,并将所有这些记录返回给客户端

一种可能的方法是:

创建一个包含要传递的记录的空表 返回 为ID创建一个表以查找下一个 查询您的具体机票 将结果添加到返回表中,将ID添加到查找ID中 桌子 而查找表中仍有结果

Query the DB for anything that has a child or parent in the Lookfor Table
    (and that isn't already in the return table)
Add all those records to the return table
Clear out the "Lookfor" table, and add all those new IDs to it.

无论如何,是的,您仍然需要在C端正确地组装数据,但是您不会用一堆单独的查询来访问数据库。存储过程将一下子为您获取所有感兴趣的记录。

使用SQL Server中的递归查询

给定

给予

或者如果您查询根票证4


然后,您可以加入您的活动或您想做的任何事情,我只是将其保持在递归查询的最低需求上

通常表示层框架提供处理分层数据的ootb控件。根据您的RDBMS版本,您可以考虑使用返回XML或JSON的查询,但这取决于您的实现。主观上,我建议选择一个单一的票证结果。不清楚是要在数据库中显示所有票证,还是只显示属于同一父项的所有票证。如果是第一次,则在应用程序中进行递归匹配。如果是第二种情况,则使用recutsive cte可能是更好的选择,因为这样您就可以只选择实际需要的数据。听起来您需要cte,我会在应用程序级别上执行,在我看来更易于阅读。Ticket有一组Ticket object为什么这会被投票选为close?正如您所看到的,它们是直接来自sql管理studiothanks的屏幕截图!但是在什么时候我必须更新链接表并选择它的子表呢?我不是必须在我的程序中而不是在db中这样做吗?这是因为我必须为每一行枚举,而不知道WHERE子句将包含什么。
With TicketTree(tID,  pID)
As
(
    Select ticketID, parentID From Ticket Where ticketID = 1 
    UNION ALL
    Select ticketID, parentID from Ticket Inner join TicketTree R On parentID = R.tID   
)
select * from TicketTree