2017-08-20 91 views
0

我有以下查询,其中列出了与其相关的类别和父类别。MYSQL获取主要类别

t.term_id is the category ID 
tx.parent is the ID of category from which they depend from. 
Main Categories have parent id= 0 

而这是问题,因为查询不显示主要类别,但只是子类别。基本上它只显示父> 0的记录,但我需要父=> 0。我已经把它放在哪里,但它不起作用。

SELECT t.term_id, t.name, tx.parent, tm.name 
from mg_terms t 

join mg_term_taxonomy tx 
on tx.term_id = t.term_id 

join mg_terms tm 
on tm.term_id = tx.parent 

where tx.taxonomy='product_cat' 
ORDER BY `tx`.`parent` DESC 

任何帮助获得主要类别(父= 0)以及?

+1

嗯,如果我理解正确的话,你需要的是'LEFT JOIN mg_terms tm',而不是'JOIN mg_terms tm' – sagi

+0

哦,最有可能的。我很快来到 – Alex

回答

0

你可以使用UNION的选择并加入了两个结果:

SELECT t.term_id, t.name, tx.parent, tm.name 
FROM mg_terms t 
JOIN mg_term_taxonomy tx ON tx.term_id = t.term_id 
JOIN mg_terms tm ON tm.term_id = tx.parent 
WHERE tx.taxonomy='product_cat' 
UNION 
SELECT t2.term_id, t2.name, tx2.parent, null 
FROM mg_terms t2 
JOIN mg_term_taxonomy tx2 ON tx2.term_id = t2.term_id 
WHERE tx2.taxonomy='product_cat' AND t2.parent = 0 
ORDER BY parent 

或mg_terms T和左选择全部加入mg_terms商标,如还建议史记。

SELECT t.term_id, t.name, tx.parent, tm.name 
FROM mg_terms t 
JOIN mg_term_taxonomy tx ON tx.term_id = t.term_id 
LEFT JOIN mg_terms tm ON tm.term_id = tx.parent 
WHERE tx.taxonomy='product_cat' 
ORDER BY `tx`.`parent` 
+0

确认,它需要LEFT JOIN而不是JOIN。感谢罗马。 – Alex