需要递归查找。 DB 与 C# GUI
Recursive lookup needed. DB vs. C# GUI
我目前有一个程序,我想在其中的网格中列出 'support tickets'。
门票来自票务系统的 SQL 数据库。
一张票有 activity,例如:
我有一个功能齐全的设计,但无法列出以下内容:
我想在我的程序中做的是列出父票,将他们的子票列为子票(详情)。但是,随着复杂性的增加,我不得不递归地执行此操作。
示例:
我的问题是:
在这种情况下,递归查找是否要在数据库级别进行?还是应用层?
我必须实现这一点,循环遍历每张票的所有票吗?
这些查询对性能有何影响?
我做了一些研究并试图单独获得门票,但没有实现。我在数据库级别尝试使用:
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 ticket
在我的数据库中。
这是真的吗?我需要在应用程序级别执行此操作吗?
我不确定这是最佳方法,但我会编写一个存储过程并让它在数据库级别简单地获取所有相关票证。我的意思是,您可以轻松地让存储过程循环,直到它获得特定票证的所有 children/parents,然后 return 所有这些记录返回给客户端。
一种可行的方法:
- 创建一个空的 table,其中包含您要传递的记录
返回
- 为 "IDs to look for next"
创建 table
- 查询您的具体机票
- 将结果添加到您的 return table,并将 ID 添加到 Lookfor-ID
table
虽然在"Lookfor"table
中还有结果
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# 端正确地 assemble 数据,但您不会用一堆单独的查询访问数据库。存储过程将一口气为您提供您感兴趣的所有记录。
在SQL服务器
中使用递归查询
给定
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
给予
或者如果您查询根票证 4
然后你可以加入你的 Activity 或任何你想做的事情,我只是将它保持在递归查询的最低需要
我目前有一个程序,我想在其中的网格中列出 'support tickets'。
门票来自票务系统的 SQL 数据库。
一张票有 activity,例如:
我有一个功能齐全的设计,但无法列出以下内容:
我想在我的程序中做的是列出父票,将他们的子票列为子票(详情)。但是,随着复杂性的增加,我不得不递归地执行此操作。
示例:
我的问题是:
在这种情况下,递归查找是否要在数据库级别进行?还是应用层?
我必须实现这一点,循环遍历每张票的所有票吗?
这些查询对性能有何影响?
我做了一些研究并试图单独获得门票,但没有实现。我在数据库级别尝试使用:
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 ticket
在我的数据库中。
这是真的吗?我需要在应用程序级别执行此操作吗?
我不确定这是最佳方法,但我会编写一个存储过程并让它在数据库级别简单地获取所有相关票证。我的意思是,您可以轻松地让存储过程循环,直到它获得特定票证的所有 children/parents,然后 return 所有这些记录返回给客户端。
一种可行的方法:
- 创建一个空的 table,其中包含您要传递的记录 返回
- 为 "IDs to look for next" 创建 table
- 查询您的具体机票
- 将结果添加到您的 return table,并将 ID 添加到 Lookfor-ID table
虽然在"Lookfor"table
中还有结果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# 端正确地 assemble 数据,但您不会用一堆单独的查询访问数据库。存储过程将一口气为您提供您感兴趣的所有记录。
在SQL服务器
中使用递归查询给定
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
给予
或者如果您查询根票证 4
然后你可以加入你的 Activity 或任何你想做的事情,我只是将它保持在递归查询的最低需要