目前我有两个表格
[Category] -> PK| CAT_ID -> CAT_PARENT (link to itself | if it's a top parent category then it's 0)
[Posts] -> PK | POST_ID -> FK | CAT_ID | CREATE_DATE
如何选择每个具有多个子类别的CAT_PARENT中前15行帖子。因此,CAT_PARENT及其所有子项中的总帖子仅为15。我们这里有多个CAT_PARENT。因此,我们可以返回包含每个CAT_PARENT及其子类别的15篇文章的多个文章组。
问题在于只需一次查询SQL服务器即可完成,因为一次查询最多可以获取200篇文章,因此最好能够在1个T-sQL查询/ linq查询中编写它。
我更喜欢您用LINQ编写它。但是,在T-SQL中编写它也可以。
非常感谢 :)
由于Alexander的解决方案,我修改了一部分,并且通过186个查询和一些延迟加载的列在不到2秒的时间内(远程)连接到我的SQL服务器。
ALTER procedure [dbo].[get_topParentPost] (
@quantity int
)
as
WITH t AS (
SELECT ROW_NUMBER() OVER (PARTITION BY top_level.CAT_ID ORDER BY p.CREATE_DATE DESC) AS row_num,
top_level.CAT_ID AS top_level_cat_id, child_category.CAT_ID AS category_id, p.POST_ID, p.CREATE_DATE, p.VALIDATE,
p.CAT_ID, p.DESCRIPTION, p.DRAF_OF, p.END_DATE, p.MOD_DATE, p.ON_HOMEPAGE, p.PUBLISH_DATE, p.[STATE], p.THUMB_ID, p.TITLE, p.[TYPE],
p.[VIEW]
FROM
(SELECT cat_id, 0 as cat_parent FROM Categories c WHERE CAT_PARRENT = 0) AS top_level
INNER JOIN Categories AS child_category
ON child_category.CAT_PARRENT = top_level.CAT_ID OR child_category.CAT_ID = top_level.CAT_ID
INNER JOIN Posts p
ON child_category.CAT_ID = p.CAT_ID AND p.VALIDATE = 1
)
SELECT * FROM t WHERE row_num <= @quantity
我修改了一些内容,以便查询按照日期降序而不是ID升序选择前15个。