2013-07-22 2 views
0

У меня есть таблицы категорий и страниц. Моя таблица структура что-то вроде этого:MySQL Присоединиться к подкатегории

страницы один имеет три колонки

id | category_id | content 
1   2  example page of subexample 
2   1  example page of example 

категории один имеет четыре

id | is_parent | parent | name 
1  1   NULL example 
2  0   1  subexample 

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

В примере, который я дал, подумайте, когда пользователь выбрал, чтобы увидеть все содержимое категории примера, я хочу, чтобы он увидел примерную страницу примера и примерную страницу subexample.

$query = "SELECT * FROM `pages` WHERE `category_id` = :cid 
union 
select * from `pages` p 
join `categories` k ON k.id = p.category_id 
where k.parent = :cid"; 

Я пробовал вышеуказанный код, но не работал для меня. Я тоже не уверен в своей логике.

ответ

0

Вы можете попробовать

SELECT * 
    FROM pages 
WHERE category_id IN 
(
    SELECT c.id 
    FROM categories c LEFT JOIN categories p 
     ON c.parent = p.id 
    WHERE p.id = :cid OR c.id = :cid 
) 

или

SELECT * 
    FROM pages p 
WHERE category_id IN 
(
    SELECT :cid 
    UNION ALL 
    SELECT id 
    FROM categories 
    WHERE parent = :cid 
) 

Вот SQLFiddle демо

Примечание: она будет работать только на один уровень категории глубокий смысл и только его подкатегорий. Если подкатегория должна иметь другие подкатегории, вам необходимо использовать динамический SQL для перемещения по дереву категорий.

+0

большое спасибо. –

0
SELECT pages.* FROM pages,categories 
WHERE pages.category_id=categories.id 
    AND (categories.id=:cid OR parent=:cid) 
Смежные вопросы