我有两张相当大的桌子,我们称它们为“作者”和“文章”。 '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。
希望我能正确解释问题。在此先感谢您的帮助。
答案 0 :(得分:4)
您可以使用outer 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