2013-07-19 59 views
0

我有關於內連接,左連接命令的問題。php&mysql找到父類別名稱

我的類別表:

 
ID | parent | title 
1 | 0  | First Category 
2 | 1  | Other Category 

我有名單的categorys,我想在SQL命令得到父母類別標題。

我曾嘗試:

SELECT cat.ID, cat.title, cat2.title as parentcatname, cat.parent 
FROM categories cat INNER JOIN categories cat2 ON cat2.ID=cat.parent 

,但它不工作。

+1

什麼是錯誤的輸出 –

+0

我不能得到父母= 0分類與此輸出。 – saidOnder

+0

@saidOnder:你需要一個* outer * join。請參見[SQL連接的可視化解釋](http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html)。 – eggyal

回答

1

您必須使用LEFT JOIN才能夠拉動所有類別,無論它們是否屬於父類別。 INNER JOIN可以濾除所有不匹配。

SELECT c.id, c.title, c.parent, p.title parent_title 
    FROM categories c LEFT JOIN categories p 
    ON c.parent = p.id 

輸出:

 
| ID |   TITLE | PARENT | PARENT_TITLE | 
------------------------------------------------- 
| 1 | First Category |  0 |   (null) | 
| 2 | Other Category |  1 | First Category | 

這裏是SQLFiddle演示

+0

謝謝,它的工作。 – saidOnder

0

如果你想獲得所有的父類,然後嘗試查詢

SELECT cat_id FROM categories WHERE parent=0; 

如果你想獲得父類類別

SELECT C.cat_id,P.title FROM categories C LEFT JOIN categories P ON P.parent = C.cat_id;

我沒有測試過上面的代碼,但它應該很好。

0

您可以隨時通過將其輸入驗證程序(加載聯機),phpMyAdmin的SQL選項卡或帶有SQL驗證的編輯器來調試SQL。它看起來像你在你的分類表選擇附近有一個小的錯字。

如果您的SQL無法正常工作,請務必讓它失望。請注意,JOIN(內部,左側,右側等)旨在連接兩個或更多個表。

SELECT 
    one.ID, one.title, one.parent, one.title, one.parent, one.title 
FROM 
    categories one 
LEFT JOIN 
    categories two 
ON 
    one.parent = two.ID