что такое запрос, чтобы получить «связанные теги», как при переполнении стека - PullRequest
1 голос
/ 30 октября 2009

У меня есть 3 таблицы:

links (id, linkName)  
tags (id, tagName)  
tagsBridge (tagID, linkID)  

Я пытаюсь поддерживать показ связанных тегов, как в SOF.поэтому, если вы нажимаете на теги "XYZ", сейчас я показываю все ссылки с тегом "XYZ", но я также хочу показать отдельный список всех других тегов, которые люди пометили теми элементами, которые также отмечены "" XYZ "

Какой самый быстрый способ запросить это

Ответы [ 3 ]

3 голосов
/ 30 октября 2009

Попробуйте:

  SELECT t.tagname
    FROM TAGS t
    JOIN TAGS_BRIDGE tb ON tb.tagid = t.id
    JOIN (SELECT li.id
            FROM LINKS li
            JOIN TAGS_BRIDGE tb ON tb.linkid = li.id
            JOIN TAGS t ON t.id = tb.tagid
           WHERE t.tagname = 'XYZ') x ON x.id = tb.linkid
GROUP BY t.tagname
2 голосов
/ 30 октября 2009

Очень уродливый вложенный запрос.

SELECT DISTINCT tagName FROM tags WHERE id in
(
    SELECT tagID FROM tagsBridge WHERE linkID IN
    (
        SELECT linkID FROM tagsBridge WHERE tagID IN
        ( 
            SELECT id FROM tags WHERE tagName like 'XYZ'
        )
    )
)
0 голосов
/ 30 октября 2009

Отредактировано: теперь это в основном просто другой способ написания Кирка Бродхерста, я думаю. Я предполагаю, что некоторые базы данных могли бы по-разному справляться с этим за кулисами, но я думаю, что почти все современные движки в конечном итоге будут иметь два одинаковых плана запросов.

select distinct t.tagName
from tags t
    join tagsBridge tb on (t.id = tb.tagID)
    join tagsBridge tbt on (tb.linkID = tbt.linkID)
    join tags ta on (ta.id = tbt.tagID)
where ta.tagname = 'XYZ'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...