2014-06-26 77 views
-1

我知道這可以用腳本語言來完成,但是執行一次SQL調用對於我的需求來說是非常棒的。我需要選擇產品的所有類別和父類別根據另一個選擇的結果選擇Mysql

說我有這兩個表。

TABLE 1:categories 
|| category || categoryid || 
=========================== 
|| fightercraft  || 5  

|| spaceship || 10 

|| ships || 3 

而且

TABLE 2:catrelationships 
category || parentcategory 
=========================== 
5 || 10 

10 || 3 

3 || 

我的限制是我只能夠一個參數傳遞給查詢上的第一個表類別。我知道我有一個戰鬥機類別,我需要在一個列中獲得父類別。

Select categories.category,catrelationships.category from categories 
JOIN categories on catrelationships.category=categories.id 
where categories.id=5 

需要以某種方式返回這個!

RESULT 
|| product  || category 

|| fightercraft || 5 

|| spaceship || 10 

|| ships || 3 

有人可以引導我在正確的方向嗎?

+1

是否有限制深度類別可以嵌套? – shmosel

+0

技術上沒有限制。但通常大概有3-5層。超過這個數字的可能性不到1%。 – user3780864

+0

表1和結果集沒有區別。 – shmosel

回答

0

有可能是一個更好的方式來做到這一點,但如果你願意承擔有嵌套類的深度的限制,以下應該做你想要什麼:

SELECT p.product 
    , c2.product AS category 
    FROM products p 
    JOIN (
     SELECT c1.category AS c1 
      , c1.parentcategory AS c2 
      , c2.parentcategory AS c3 
      , c3.parentcategory AS c4 
      FROM categories c1 
    LEFT JOIN categories c2 ON c1.parentcategory = c2.category 
    LEFT JOIN categories c3 ON c2.parentcategory = c3.category 
     ) c ON p.category = c.c1 
    JOIN categories c2 ON c2.category IN (c.c1, c.c2, c.c3, c.c4) 
    ORDER BY p.product ASC, c2.category DESC; 

上面的查詢假設最大嵌套深度4個類別。您可以根據需要調整深度。

SQL Fiddle

+0

完美的作品。但我意識到我問了一個錯誤的問題:( – user3780864

+0

我已經更新了原來的問題,如果有人能幫助我很好的爲你業績,請幫助你 – user3780864

+0

這是相同的邏輯,可能更簡單一點,你應該能夠得到你的結果稍微調整一下我的查詢 – shmosel

相關問題