2012-04-02 47 views
0

请仔细阅读,因为我的英语不是很好,问题并没有一个简单的答案!多行加入了全文检索

我有一个简单的结构是这样的:

table nodes 
------------------------ 
nodeId | name  
    1 | Mazda Miata 2.0 
    2 | Red Cars   
    3 | Mazda Cars 
    4 | Sport cars 

table associations 
------------------------ 
nodeId | hasNodeId 
    1 | 2 
    1 | 3 
    1 | 4 
    3 | 4 
    3 | 1 

,我想选择第一个表连接(在同一行)中的所有相关行的任何行,根据是什么表中规定“协会”

问题是,加入与一个节点一个节点给了我一个相关节点的全文相关性:我想是所有相关节点的相关

谢谢

编辑,连接结果应该是你想象的这样,使用全文搜索:

nodeId | name     | joinedName |  fulltextRelev 
    1 | Mazda Miata 2.0  | Red Cars  |  4.2 
    1 | Mazda Miata 2.0  | Mazda Cars |  2.3 
    1 | Mazda Miata 2.0  | Sport Cars |  3.2 

前一个是一个抽象的表,我真正想要的是让独特/不同的节点ID,用上表中的fulltextRelevance的总和......这样的:

nodeId | name     |  fulltextRelevSUM 
    1 | Mazda Miata 2.0  |  9.7 

9.7 = 4.2 + 2.3 + 3.2 
+0

我认为这将是更好的首先你自己的问题的决心展现,或至少预期输出 – golgofa 2012-04-02 12:31:03

+0

我不知道如何解决,很明显,我不能参加行与不义的行数,但可能与GROUP BY,或类似的东西,我可以得到全球全文相关 – skyline26 2012-04-02 12:38:36

+0

1 |马自达Miata 2.0 |相关性2.3 | “mazda”.... 1 |马自达Miata 2.0 |相关性4.4 | “红”等等......我想单行,让我按相关2.3 + 4.4,因为我想要做的ORDER BY globalRelevance DESC – skyline26 2012-04-02 12:47:15

回答

1

你只要按你的节点ID是这样的:

SELECT 
nodeId, name, SUM(fulltextRelevSUM) AS fulltextRelevSum 
FROM 
/*your already done work here*/ 
GROUP BY nodeId 
+0

我无法获得总和 – skyline26 2012-04-02 18:50:55

+0

@ toPeerOrNotToPeer你是什么意思与“我无法得到的总和”?告诉我你的查询 – fancyPants 2012-04-03 07:53:48

0
SELECT 
    n.nodeID, 
    n.name, 
    n2.name as joinedName, 
    MATCH(n.name) AGAINST(n2.name) AS fulltextRelev 
    FROM NODES n 
    LEFT OUTER JOIN ASSOCIATIONS a 
    ON n.nodeID = a.nodeID 
    LEFT OUTER JOIN nodes n2 
    ON n2.NODE_ID = a.hasNodeID 
    WHERE n.nodeID = 1 

我不完全理解你的文字的相关部分。你能解释一下吗?上面的查询会得到你想要的前4行,在第二部分的查询应该很容易