2009-10-31 2 views
1

J'ai récemment posé cette question pour obtenir des balises connexes comme dans Stack Overflow: what is the query to get "related tags" like in stack overflowObtenir le nombre de balises liées

Je voudrais montrer le compte comme dans le débordement de pile, donc à chaque étiquette liée, ce qui est le nombre de cet autre tag sur les questions avec le premier tag? Parce que ces requêtes ont toutes des distinctions dans ces requêtes.

Je ne pense pas que ce soit possible, mais Stack Overflow doit évidemment le faire (à moins qu'ils ne le fassent dans plusieurs requêtes.)

Y a-t-il un moyen d'obtenir le nombre de balises associées dans la même requête ou doit-il être fait dans des requêtes séparées?

Répondre

4

Vous pouvez rechercher le nombre total de Tags associés:

SELECT t2.tagname, count(distinct tb2.linkid) as RelatedLinkCount 
FROM TAGS t2 
JOIN TAGS_BRIDGE tb2 on t2.tagid = tb2.tagid 
JOIN TAGS_BRIDGE tb1 on tb2.linkid = tb1.linkid 
JOIN TAGS t ON t.id = tb1.tagid 
WHERE t.tagname = 'tag3' 
GROUP BY t2.tagname 

En commençant par le nom de la balise (t), il cherche des liens pour cette balise (TB1), il cherche les balises qui partagent une lien (tb2). Il recherche le nom des tags associés (t2) et c'est fait :) Pas besoin même de rejoindre la table LINKS.

+0

cela ne semble pas fonctionner non plus car il me donne le nombre total de ces étiquettes individuellement . pas le nombre de tags où il y a à la fois le nouveau et le vieux tag – leora

+0

Eh bien, c'est encore plus facile, répondre édité. Ce n'est pas très agréable de rétrograder des réponses auxquelles les gens font des efforts (même chose pour la réponse de Ryan) – Andomar

1

Si tel est le cas, vous pouvez utiliser une requête comme ça ...

liens (id, LINKNAME)
balises (id, tagName)
tagsBridge (TagId, linkID)

Je pense que la question que vous voudriez est cette ...

SELECT T.id, T.tagName, COUNT(TB.tagID) 
FROM tagsBridge TB 
INNER JOIN tags T ON TB.tagID = T.id GROUP BY T.id, T.tagName 

Oh, mes excuses, je l'ai fait mal comprendre la question ... ce que je pense que vous voulez est alors cela, mais il n'utilise les requêtes imbriquées ..

SELECT T.id, T.tagName, COUNT(TB.tagID) 
FROM tagsBridge TB 
INNER JOIN tags T ON TB.tagID = T.id 
WHERE TB.tagID IN (
    SELECT tagID FROM tagsBridge WHERE linkID IN (
    SELECT linkID FROM tagsBridge WHERE tagID IN (
     SELECT tagID FROM tagsBridge WHERE linkID = (THE SELECTED LINK) 
    ) 
) 
) 
GROUP BY T.id, T.tagName 

Cette requête devrait vous donner la liste des étiquettes d'identification, les noms de balises et un compte de chacun pour toutes les balises de lien sélectionné et tous les tags associés aux balises de ce lien. Un homme qui semble confus mais je pense que c'est ce que vous cherchez.

+0

même structure de table que la question liée ci-dessus – leora

+0

peut-être ma question n'était pas claire. Je veux montrer le nombre de tags "liés". donc j'ai choisi "voyages" parexemple je veux voir un compte de tous les autres tags où il y a des questions qui ont aussi des voyages et ce tag particulier – leora

Questions connexes