2010-12-30 2 views
2

Интересно, может ли кто-нибудь помочь мне с запросом MySQL (v5.0.51), с которым у меня возникают проблемы. У меня есть таблица вроде этого:Помощь с MySQL Query

category_id | category_text | subcategory 
25   | Motor Controls | NULL 
26   | Contactors  | 25 
27   | Overloads  | 25 
28   | Motors   | NULL 
29   | Accessories | 28 

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

В приведенном выше примере: Контакторов и Перегрузка принадлежит управлению двигателем, поскольку их соответствующая подкатегория имеет значение 25, которое является category_id (25) от двигателя управления

Теперь я использую эти значения в таблице PRODUCTS для хранения но здесь я ТОЛЬКО храню category_id подкатегории.

product_id | product_item | product_supplier_id | product_description | product_category_id 
24   | Product A | 39     | Product A description | 27 --category_id of subcategory (ie.Overloads) 
25   | Product B | 39     | Product B description | 26 --(Contactors) 

Проблема, которую я имею, что мне нужно один SQL запрос, где я могу запросить таблицу PRODUCTS (среди других) и довести до ОБА категории и подкатегории. Я могу сделать это для того или другого, но не для обоих. Я попробовал UNION, JOINS и т. Д., Но просто не могу понять. Это то, что у меня есть до сих пор, которое просто воспитывает подкатегорию.

SELECT p.*, c.company_name, pc.category_text AS subcategory 
FROM products p, company c, product_categories pc 
WHERE p.product_supplier_id = c.company_id 
AND p.product_category_id = pc.category_id 

Это приводит к запросу, генерирующему результат ниже.

product_id | product_item | product_supplier_id | product_description | product_category_id | company_name  | subcategory 
24   | Product A | 39     | Product A description | 27     | Product A Supplier | Overloads 
25   | Product B | 39     | Product B description | 26     | Product B Supplier | Contactors 

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

24 | Product A | 39 | Product A description | 27 | Product A Supplier | **Motor Controls** | Overloads 

Могу ли я сделать это с тем, как создается таблица или мне нужно его изменить?

Извините, у меня было несколько хороших изображений, чтобы было легче понять, но с «репутацией» 1, я не мог опубликовать его.

Любая помощь будет оценена по достоинству. Обратите внимание, что я использую запрос в PHP для доступа к базе данных MySQL.

Благодаря

ответ

1
SELECT p.*, 
       c.company_name, 
       pc.category_text AS subcategory 
       ppc.category_text AS category 
    FROM products p, 
       company c, 
       product_categories pc, 
       product_categories ppc 
WHERE p.product_supplier_id = c.company_id 
    AND p.product_category_id = pc.category_id 
    AND pc.subcategory = ppc.category_id 

P.S: Я хотел бы MySQL имел лучшую поддержку для запросов иерархических данных (например, соединить пунктом в Oracle)

+0

Спасибо! Это сработало отлично. Я предполагаю, что я делал это более сложным, чем нужно ... хотя все говорят, что, когда они будут представлены с правильным решением? Еще раз спасибо! – user558720

0
SELECT p.*, c.company_name, pc.category_text AS subcategory,ppc.category_text AS category 
    FROM products p 
    left join company c on p.product_supplier_id = c.company_id 
    left join product_categories pc on p.product_category_id = pc.category_id 
    left join product_categories ppc on pc.subcategory = ppc.category_id 
+0

Только для записи это тоже сработало. Это дает мне возможность учиться. Благодаря! – user558720

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