2013-07-31 27 views
0

有3代表“用户”,“博客”和“图像” 一个用户可以拥有多个博客SQL查询中给定关系

一个博客可以有多个图片和签证诗句 是多图像可用于多个博客

我需要在一个单一的博客图像的总数查询..

而且我也需要为每个用户图像的总数查询..

请指导无线次查询来获取数据..

我创建的数据库是这样的:

创建表作者(ID INT,名称为nvarchar(MAX));

创建表图像(ID INT,ImagePath的为nvarchar(最大));

创建表博客(ID INT,名称为nvarchar(最大),AUTHORID INT);

创建表BlogImages(ID INT,BlogId INT,图像标识INT);

ALTER TABLE博客添加外键(AUTHORID)参考文献作者(Id)的

ALTER TABLE BlogImages添加外键(BlogId)参考文献博客(Id)的

ALTER TABLE BlogImages添加外键(图像标识)参考图像(Id)的

在上述关系我有使用同一图像

+1

ca你在www.sqlfiddle.com上提供了你的表格的例子吗? – BeNdErR

+0

请提供一些示例数据 –

+0

先生,我已经提供了我的表格..所以,现在你可以指导我正确 – user2631770

回答

0

回复修改问题:

对于单个图像的数博客:

select COUNT(Image.Id) 
from Image, BlogImages 
where Image.Id = BlogImages.ImageId 
and BlogImages.BlogId = @BlogId 

其中@BlogId是您要为图片计数的博客的ID。

对于图像的数量由用户:

select COUNT(Image.Id) 
from Image, BlogImages, Blog 
where Image.Id = BlogImages.ImageId 
and BlogImages.BlogId = Blog.Id 
and Blog.AuthorId = @AuthorId 

其中@AuthorId是要为计算图像的用户的ID。

如果您不想计算两次相同的图像,您应该在select关键字后面添加distinct

+0

先生,我已经提供了我的表..所以,现在你可以正确指导我 – user2631770

+0

@ user2631770我更新了我的答案适合你修改后的问题。 – Rob

+0

为什么不使用正确的连接? – Sam

0

为了得到的总数具有blogId和图像标识,这意味着单个图像标识可以有多个blogIds,所以多个博客的表BlogImages下面的查询

select U.userId,count(*) from 
(
select U.userId,I.imageId from user U,blog B, images I 
where B.userId==U.userId and B.blogId==I.blogId 
) 
group by U.userId 

而且在单个博客使用图像的总数每个用户尝试图像以下

select B.blogId,count(*) from 
(
select B.blogId,I.imageId from blog B,images I 
where B.blogId==I.blogId 
) 
group by B.blogId 
+0

先生,我已经提供了我的表..所以,现在你可以指导我正确 – user2631770