Как присоединиться к таблице категорий для родителей в запросе SQL? - PullRequest
0 голосов
/ 17 декабря 2011

У меня есть таблица для сообщений как (id, category_id, ...), затем JOIN с таблицей категорий как (category_id, category_name, parent, ...) ON category_id.Родитель - это category_id другой категории.Например:

category_id    category_name      parent
1              Computer Science   NULL
2              Web Technology     1
3              Mathematics        NULL
4              PHP                2

Как я могу JOIN сообщений и таблиц категорий читать родительские категории сообщений.Например,

id     category_id    post_title
44     4              something

С простым JOIN ON category_id я могу получить только PHP в качестве категории;как я могу получить родителей также как Computer Science > Web Technology > PHP?

ПРИМЕЧАНИЕ: Я использую mysql с движком MyISAM.

Ответы [ 2 ]

2 голосов
/ 17 декабря 2011

Просто выполните дополнительное объединение для дополнительного элемента, но используйте ИТ в качестве ЛЕВОГО объединения, поскольку не все категории имеют родительскую категорию, и вы не хотите исключать их.

select
      P.ID,
      P.Post_Title,
      P.Category_ID,
      C.Category_Name as FirstCat,
      C.Parent,
      COALESCE( C2.Category_Name, ' ' ) as ParentCategory
   from
      Posts P
         JOIN Categories C
            on P.Category_ID = C.Category_ID
            LEFT JOIN Categories C2
               on C.Parent = C2.Category_ID
   where
      AnyFiltering
1 голос
/ 17 декабря 2011

Если вы хотите ограничить глубину, вы можете использовать UNION, чтобы набрать JOIN s, чтобы получить то, что вы хотите.Вот 3-х уровневая реализация:

select * from posts
where category_id = ?
union
select * from posts p
join category c on c.category_id = p.category_id
where c.parent = ?
union
select * from posts p
join category c1 on c1.category_id = p.category_id
join category c2 on c2.category_id = c1.parent
where c2.parent = ?

Вы бы передали одну и ту же переменную (для интересующей вас категории) для всех 3 заполнителей.

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