-1

我有两张相当大的桌子,我们称它们为“作者”和“文章”。“articles”表中的每一行都与“AuthorID”字段中的值表示的单个作者相关联。

我们有一个页面,其中显示了一组符合特定条件的作者,以及与每个作者关联的第一篇文章,按文章中“DatePublished”字段的值排序。

目前这是通过执行多个查询来实现的,结果证明这非常慢,尤其是在为大量作者执行时。我不是这方面的专家,但我很确定有一种方法可以通过单个语句获取这些数据,这将比当前的混乱情况优化得多。

换句话说:(将每个函数调用视为单个 SQL 查询)

我们现在拥有的:

$authors = get_some_authors($criteria);
for each($author in $authors) {
    $author->lastArticle = get_latest_article_by_author($author_id);
}

我们需要的:

$authors_with_last_articles = get_some_authors_and_their_latest_articles($criteria);

我们使用的是 MS SQL Server 9.0。

希望我能正确解释问题。在此先感谢您的帮助。

4

1 回答 1

4

您可以使用 anouter apply来实现for-each行为:

select  *
from    Authors
outer apply
        (
        select  top 1 *
        from    Articles
        where   Authors.ID = Articles.AuthorId
        order by
                Articles.PublishDate desc
        ) as LastArticle
于 2012-06-18T12:04:32.620 回答