2012-04-02 11 views
0

Bitte lesen Sie sorgfältig, weil mein Englisch ist nicht gut, und die Frage hat keine einfache Antwort!Join mit mehreren Reihen für die Volltextsuche

Ich habe eine einfache Struktur wie folgt:

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 

und ich möchte jede Zeile der ersten Tabelle auszuwählen Verbinden (in der gleichen Zeile), um alle zugeordneten Reihen, entsprechend dem, was durch die Tabelle festgelegt ist „Verbände“

das Problem ist, dass ein Knoten mit einem einzigen Knoten verbinden, gibt mir die Volltext Relevanz eines einzelnen zugehörigen Knoten: was ich will, ist die Relevanz aller zugehörigen Knoten

danke

bearbeitet, sollte die Join-Folge sein, wie du so vorstellen, die Suche Volltext mit:

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 

die vorherigen ist ein abstrakter Tisch, was ich wirklich will mit dem einzigartigen/deutlichem nodeId, erhalten Summe der fulltextRelevance der vorherigen Tabelle ... wie folgt aus:

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

9.7 = 4.2 + 2.3 + 3.2 
+0

Ich denke, es wird besser sein, zuerst Ihre eigene Problemlösung zu zeigen, oder zumindest erwartete Ausgabe – golgofa

+0

Ich weiß es nicht Wie zu lösen, ist es offensichtlich, dass ich nicht mit einer nicht definierten Anzahl von Zeilen eine Reihe verbinden kann, aber vielleicht mit GROUP BY, oder so ähnlich, kann ich die globale Volltext-Relevanz – skyline26

+0

1 | Mazda Miata 2.0 | Relevanz 2.3 | "Mazda" .... 1 | Mazda Miata 2.0 | Relevanz 4.4 | "rot" etc ... Ich möchte eine einzelne Zeile, die mir Relevanz 2.3 + 4.4 gibt, weil ich ORDER BY globalRelevance DESC tun möchte – skyline26

Antwort

1

Sie nur zu einer Gruppe wie diese von Ihrem nodeId haben:

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

Ich kann nicht die Summe erhalten – skyline26

+0

@ toPeerOrNotToPeer Was meinst du mit "Ich kann die Summe nicht bekommen"? Zeig mir deine Anfrage – fancyPants

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 

Ich verstehe nicht vollständig Ihre Text Relevanz Teil. Kannst du es weiter erklären? Die obige Abfrage erhalten Sie die gewünschten ersten 4 Zeilen, die Abfrage auf dem zweiten Teil sollte einfach sein