2013-05-24 2 views
0

У меня есть 2 таблицы:список все продукты основной категории и подкатегории

категории

id - name - parent 
1 - Category 1 - 0 
2 - Category 2 - 0 
3 - Category 3 - 0 
4 - Category 4 - 0 
5 - Subcategory 11 - 1 
6 - Subcategory 111 - 5 
7 - Subcategory 112 - 5 
... 

продукты

id - name - category - description 
1 - Name - 5 - Description 

В категории таблицы У меня есть 3 уровня

  • Категория 1
    • Подкатегория 11
    • Подкатегория 111
    • Подкатегория 112
    • Подкатегория 113
  • Подкатегория 12
    • Подкатегория 121
    • Подкатегория 122
    • Подкатегория 123
    • Подкатегория 13
  • Категории 2
  • Категория 3

Я выбираю продукты из подкатегорий с:

mysql_query("SELECT *, products.name AS p_name, categories.name AS c_name 
FROM products 
INNER JOIN categories ON categories.id = products.category 
WHERE categories.id = '". $_GET['items'] ."' 
GROUP BY products.id DESC"); 

продуктов находятся на третьем уровне категорий (подкатегория 111, категория 112, Подкатегория 113, Подкатегория 121 ...)

Как просмотреть все продукты этой категории ories также, когда я обращаюсь к родительской категории или основной категории (Категория 1, Категория 2, Подкатегория 11, Подкатегория 12 ...)?

Спасибо!

+1

Err, так в чем ваш вопрос? С каким кодом у вас проблемы? –

+0

Как управляется иерархия категорий: самосоединение в таблице категорий, таблица ребер? – Thomas

+0

Капитан, извините! Мне нужно просмотреть продукты из подкатегорий, когда я получаю основную категорию ... – zmeutz

ответ

0

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

Select Root.name 
    , Level1.name As Level1Category 
    , Level2.name As Level2Category 
From Category As Root 
    Left Join Category As Level1 
     On Level1.parent = Root.id 
    Left Join Category As Level2 
     On Level2.parent = Level1.id 
Where Root.parent = 0 
Order By Root.name, Level1.name, Level2.name 

Чтобы просматривать продукты вы бы просто присоединиться на продукты любого уровня иерархии:

Select Root.name 
    , Level1.name As Level1Category 
    , Level2.name As Level2Category 
    , P.name As ProductName 
From Category As Root 
    Left Join Category As Level1 
     On Level1.parent = Root.id 
    Left Join Category As Level2 
     On Level2.parent = Level1.id 
    Join Products As P 
     On P.category = Root.id 
      Or P.category = Level1.id 
      Or P.category = Level2.id 
Where Root.parent = 0 
Order By Root.name, Level1.name, Level2.name, P.name 
+0

Теперь это работа над родительскими категориями @Thomas , но когда я вхожу в третью категорию, он перечисляет все продукты ... не только из этих категорий ... 'SELECT *, root.name, level1.name AS level1category, level2.name AS level2category, p.name AS p_name FROM категории AS root LEFT JOIN категории AS level1 ON level1.parent = root.id LEFT JOIN категории AS level2 ON level2.parent = level1.id JOIN products AS p ON p.category = root.id ИЛИ p.category = level1.id ИЛИ p.category = level2.id WHERE root.parent = 13 ORDER BY root.name, level1.name, level2.name, p.name' – zmeutz

+0

изменил 'WHERE root.parent = 13' с' WHERE root.parent = '". $ _GET [' items ']."' 'и теперь, когда я вхожу на уровень 3thid, а не из перечисленных продуктов ... – zmeutz

+0

I найдено 'WHERE root.id = '". $ _GET [' items ']. "'' исправлено! Спасибо @Thomas! – zmeutz

Смежные вопросы