2012-04-09 54 views
0

我有一个SQL句子的问题。我有属于一个类别(实体)的实体画廊。然后我有实体GalleryImages,并且存储特定图库的图像。图库可以有很多图像,但图库也可以不存在图像(不添加图像)。selecta画廊有一个或多个图像

现在我想要构建SQL查询来选择(DESC)具有一个或多个图像并属于某个类别的图库。

类别(ID,姓名)

画廊(ID,姓名,CATEGORY_ID)

GalleryImages(ID,gallery_id,路径)

分类 - >画廊(一对多) 画廊 - > GalleryImages(一对多)

回答

0

尝试这种情况:

SELECT * 
FROM Gallery as G 
WHERE 
    G.category_id = 1 
    AND G.id in (SELECT gallery_id FROM GalleryImages) 

将1替换为您要选择的caregory_id。

+0

我尝试这样做,但这种查询选择最新图库不管画廊有图片或不:“选择P档FROM NewsAdminBundle:画廊p其中p .category_id =:category AND p.id IN(SELECT i FROM NewsAdminBundle:GalleryImages i)ORDER BY p.created_at DESC' – repincln 2012-04-09 20:16:42

0

嗯 - 看起来像基本问题已被回答。但你的安装程序会让我稍微有些迷惑......
我想我会稍微调整你的表格(假设国际化不是问题)。除此之外,我不觉得'类别'和'图库'的概念之间有根本的区别。现在,可能会出现“超级”和“次级”类别/画廊,并且图像可能一次属于多个(即,来自Renniasance,Michaelangelo,雕塑等)。它类似于标签的概念。

我可能会修改你的表,是这样的:

Gallery (or Category, if you prefer) 
============= 
id -- autoincrement 
name -- varchar(50) or something, unique 
parent -- fk reference to another Gallery.id row, optional 

Image 
========== 
id -- autoincrement 
name -- varchar(50) or similar, non-unique 
path -- store as URI/URL, unique 
description -- varchar(128) or similar 

Gallery_Image 
=============== 
galleryId -- fk reference to Gallery.id 
imageId -- fk reference to Image.id 
     -- the pair is unique 

Related_Gallery -- optional table 
================ 
galleryId -- fk reference to Gallery.id 
relationship -- code, or fk reference to other table 
relatedId -- fk reference to Gallery.id 
      -- entire row should be unique 
      -- somewhat tricky to use. 
+0

感谢您对提示的回复。我忘了提及,我也有一个新闻实体,该实体中的文章属于类别。画廊也属于这一类(即科学,文化......)。所以我有类别,所以新闻如画廊属于这些类别。 – repincln 2012-04-09 20:21:58

+0

@repincln - 那么是的,他们可能是不同的实体(取决于你如何概念化)。但是请记住,新闻实体可能属于多个不同的类别。这里显示的画廊技术应该适用于您的新闻类别。 – 2012-04-09 20:34:03