2009-07-20 3 views
1

У меня есть три таблицы: категории, подкатегории и подкатегории.MySQL присоединяется для отображения категорий, подкатегорий и подкатегорий

Я хочу, чтобы отобразить список, который отформатированный как:

dvds 
cds 
cds > pop 
cds > blues 
cds > new age 
cds > new age > whale noises 
books 
books > cowboys 
books > zombies

Я сумел отобразить все для названий категорий самостоятельно, за исключением, когда у них есть дети, например, то, что я получаю:

В приведенном выше списке отсутствуют категории компакт-дисков и книг, а также подкатегория cd> new age.

Запрос я использую:

SELECT 
    c.name AS c_name, 
    sc.name AS sc_name, 
    ssc.name AS ssc_name 
FROM 
    categories c 
LEFT JOIN 
    subcategories sc 
    ON c.id = sc.category_id 
LEFT JOIN 
    subsubcategories ssc 
    ON sc.id = ssc.subcategory_id 

Любая помощь с этим была бы оценена!

ответ

1
SELECT * 
FROM (
     SELECT DISTINCT 
       c.name AS c_name, 
       sc.name AS sc_name, 
       ssc.name AS ssc_name 
     FROM categories c 
     LEFT JOIN 
       subcategories sc 
     ON  c.id = sc.category_id 
     LEFT JOIN 
       subsubcategories ssc 
     ON  sc.id = ssc.subcategory_id 
     GROUP BY 
       c.name, sc.name, ssc.name WITH ROLLUP 
     HAVING c_name IS NOT NULL 
     ) q 
ORDER BY 
     c_name, sc_name, ssc_name 
+0

Благодарим за быстрый ответ. Это почти правильно, за исключением того, что он отображает category_name дважды для категорий без детей. Категории с подкатегориями и подкатегориями работают до конца. – Dan

+0

Ой, подождите, они не работают отлично. Они показывают, как cds> китовые шумы и компакт-диски> новый возраст> китовые шумы, а не cd> new age и cds> new age> китовые шумы. – Dan

+0

@ Dan: попробуйте сейчас. – Quassnoi

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