Справка по таксономии SQL - PullRequest
1 голос
/ 11 января 2011

У меня есть база данных, которая связывает контент по таксономии, и я пытаюсь запросить этот контент по таксономии.Это выглядит так:

Table 1

content_id, content_name

Table 2

content_id, content_taxonmoy

В моем запросе я пытаюсь найти контент с двумя или более типами связанной таксономии.Мой запрос выглядит так:

SELECT content_id FROM table_1 JOIN table_2 ON table_1.content_id=table_2.content_id WHERE content_taxonomy='ABC' AND content_taxonomy='123'

За исключением того, что ничего не возвращает.Позже я попробовал группу с:

SELECT content_id FROM table_1 JOIN table_2 ON table_1.content_id=table_2.content_id WHERE content_taxonomy='ABC' AND content_taxonomy='123'GROUP BY content_id, content_taxonomy

Но это тоже не сработало.Любые предложения, пожалуйста?

1 Ответ

1 голос
/ 11 января 2011
SELECT  *
FROM    content c
WHERE   (
        SELECT  COUNT(*)
        FROM    taxonomy t
        WHERE   t.content_id = c.content_id
                AND t.content_taxonomy IN ('ABC', '123')
        ) = 2

Создайте UNIQUE INDEX или PRIMARY KEY на taxonomy (content_id, content_taxonomy) для быстрой работы.

SELECT  c.*
FROM    (
        SELECT  content_id
        FROM    taxonomy
        WHERE   content_taxonomy IN ('ABC', '123')
        GROUP BY
                content_id
        HAVING  COUNT(*) = 2
        ) t
 JOIN   content c
 ON     c.content_id = t.content_id

В этом случае создайте UNIQUE INDEX или PRIMARY KEY на taxonomy (content_taxonomy, content_id) (обратите внимание на порядок или поля).

Любое решение может быть более или менее эффективным, чем другое, в зависимости от того, сколько у вас есть таксономий на контент и какова вероятность совпадения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...