2017-08-04 69 views
0

我想从两个表中选择一些数据,但它比我第一次想到的稍微复杂一些。我有两张桌子(content & relations)。从关系表加入MySQL

content 
    +----+-----------+--------------------+--------------+ 
    | id | elementId |  title  | field_body | 
    +----+-----------+--------------------+--------------+ 
    | 1 |   1 | test title   | test body | 
    | 2 |   2 | another title  | another body | 
    | 3 |   3 | category 10  | null   | 
    | 4 |   4 | sub category 20 | null   | 
    +----+-----------+--------------------+--------------+ 


    relations 
    +----+----------+----------+-----------+ 
    | id | sourceId | targetId | sortOrder | 
    +----+----------+----------+-----------+ 
    | 1 |  2 |  3 |   1 | 
    | 2 |  2 |  4 |   2 | 
    +----+----------+----------+-----------+ 

的方式表是设置如下, 我创建我的网站的“物品”是由以下部分组成:

  • 文章标题
  • 文章正文
  • 文章主类
  • 文章子类别

我需要获取每一篇文章,并从表content

因此,例如,它会带回该行相关的主副类别 - >

another title, another body, category10, sub category 20

因为在关系表源id为2,链接到文章的elementId,targetId是与文章关联的类别的ID。

解决此问题的最佳方法是什么?我已经尝试了几种不同的查询的得到这个工作,但它似乎并不可能

+2

提示:'JOIN' ...... –

+0

哪里是你试图查询股吧 – Bhargav

+1

我不会像设计表首先。它非常混乱,如果它变得更大,你会遇到问题。为什么你不会有一个名为Categories的表,其中包含不同类别的类别。您可以通过在文章表中将该类别的FK关联到每个文章所属的类别。 – GarRudo

回答

0

我认为这是一个错误的乌尔关系表中的数据,这可能是基于邻接表型号:

ID为== 2记录必须具有的sourceID场== 3:

relations 
    +----+----------+----------+-----------+ 
    | id | sourceId | targetId | sortOrder | 
    +----+----------+----------+-----------+ 
    | 1 |  2 |  3 |   1 | 
    | 2 |  3 |  4 |   2 | 
    +----+----------+----------+-----------+ 

之后ü可以试试这个SQL:

select 
c.id, 
c.title as article_title, 
c.field_body as article_body, 
c1.title as article_main_category, 
c2.title as article_sub_category 
from 
content c 
join relations as r1 on r1.sourceId = c.elementId 
join content as c1 on c1.elementId = r1.targetId 
join relations as r2 on r2.sourceId = c1.elementId 
join content as c2 on c2.elementId = r2.targetId 

如果r elations表数据是确定的,而且中将sortOrder场是有道理的,那么我们可以试试这个SQL查询:

select 
c.id, 
c.title as article_title, 
c.field_body as article_body, 
c1.title as article_main_category, 
c2.title as article_sub_category 
from 
content c 
join relations as r1 on r1.sourceId = c.elementId and r1.sortOrder = 1 
join content as c1 on c1.elementId = r1.targetId 
join relations as r2 on r2.sourceId = c.elementId and r2.sortOrder = 2 
join content as c2 on c2.elementId = r2.targetId 
+0

sourceId是与该类别关联的文章的elementId,因为每个文章都有一个“主类别”和“子类别”,主类别是具有sortOrder == 1的项目,子类别是该项目sortOrder == 2如果有意义的话? – scriptss

+0

我刚刚更新了我的文章,希望它会有所帮助。 –

+0

第二个查询似乎工作完美,谢谢! – scriptss