目前我有2臺如何在T-SQL/Linq中查詢這個複雜的查詢?
[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中編寫它。
非常感謝你:)
由於亞歷山大的解決方案到這裏,我修改了一些部分,並將其與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上升
什麼是帖子表有問題的事,給您的查詢和模式? – 2010-02-16 01:32:09
對不起,我忘了包括一些東西 – DucDigital 2010-02-16 01:35:11
我已經添加了這個問題的詳細信息。 – DucDigital 2010-02-16 01:37:31