2009-07-20 179 views
1

我有三个表格:类别,子类别和子类别。MySQL加入显示类别,子类别和子类别

我想显示按照以下格式列表:

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

我已经成功除了自己的类别的名称,以显示一切,当他们有了孩子,如什么,我得到的是:

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

上面所列内容缺少CD和书籍类型,加上CDS>新时代的子类别。

我使用的查询是:

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 2009-07-20 16:47:48