搜索多个表

时间:2013-03-27 02:19:24

标签: mysql database database-design relational-division

我的应用程序有一些 ,它们拥有一些 属性 页面 可以 链接 。我希望我的数据库结构能够最好地支持搜索 链接 ,其中包含属于的某些 属性 即可。链接是Pages的集合,Page可以有很多链接。


我的数据库结构目前如下

PAGE:
    id
    title
    content

-

ATTRIBUTE:
    id
    page_id
    name
    value

-

LINK:
    id
    title

-

PAGE_LINK:
    page_id
    link_id

所以说我的食谱 Page 名为'Mash Potato'和成分 Page 称为'Potato',其中包含 链接 ,名为'Potato Link''Mash Potato'具有以下 属性 - 膳食:晚餐,风味:咸味,难度:简单, AND 'Potato'具有 属性 - 季节:秋季,价格:便宜

我希望能够找到 Cheap,Savory和秋季季节的链接,并获得“ Potato Link”的回复。


如何在SQL中编写该查询,这是查询此类内容的最佳数据库结构吗?

1 个答案:

答案 0 :(得分:1)

您的属性已附加到网页上。因此,您可以通过检查页面是否存在这些属性来搜索具有某些属性的页面。查找页面如下所示:

Select Page.ID
From Page
where EXISTS
 (Select * 
  From Attributes
  Where Page_Id = Page.ID
    and (     (Name = 'Season' and Value = 'Autumn')
          or  (Name = 'Flavour' and Value = 'Savory')
          ... etc. ...
        )

如果您想查找链接,那么您可以将其加入PAGE_LINK(如果您愿意,也可以加入LINK。)

Select Page.ID
From Page
 Join Page_Link PL on PL.Page_ID = Page.ID
 Join Link on Link.ID = PL.Link_ID
where EXISTS
 (Select * 
  From Attributes
  Where Page_Id = Page.ID
    and (     (Name = 'Season' and Value = 'Autumn')
          or  (Name = 'Flavour' and Value = 'Savory')
          ... etc. ...
        )