2015-11-05 74 views
0

使用子查詢的結果,我需要在WordPress安裝執行以下MySQL查詢:MySQL的:另一個子查詢

  1. 獲取類別ID在類別名稱爲「Oppskrifter」。
  2. 獲取所有這些ID的子類別。
  3. 獲得由此產生的兒童類別的子女(即2.的子女和1.的孫子女)。

我想解決這個使用別名的子查詢,但我不能使它的工作,我也不確定這是做到這一點的最佳方式。這是我目前的看法:

SELECT * FROM 
(
    SELECT term_id AS oppskrifter_id 
    FROM wp_terms WHERE name = "Oppskrifter" 
) AS R1, 
(
    SELECT * FROM wp_terms AS t 
    INNER JOIN wp_term_taxonomy AS tt 
     ON tt.term_id = t.term_id 
    WHERE tt.taxonomy = "category" AND tt.parent IN (R1) 
) AS R2; 

第一個子查詢工作得很好本身,而是引入了第二個,當它不知道什麼R1尚未,所以我得到的錯誤ERROR 1054 (42S22): Unknown column 'R1' in 'having clause'。如果我通過實際查詢替換R1,則我得到錯誤消息ERROR 1060 (42S21): Duplicate column name 'term_id'

我在這裏想要做的是在第二個查詢中找到孩子(第二點),然後爲使用這些結果的孫子們做同樣的事情。

我有哪些選擇來解決這個問題?做到這一點的正確方式是什麼,無論是速度方面還是可讀性方面?

+0

'R1'是指多列而你正試圖在列集合搜索'tt.parent'列。 – px5x2

+0

你不完全清楚你想達到什麼樣的結果。它是兩個子查詢的行集還是隻有最後一個?小提琴或虛擬數據的例子將是完美的 –

+0

理想的結果是將兩個子查詢的行集合在一起,因爲我需要從子項到孫子的映射。也就是說,我需要知道哪些孫輩屬於「Oppskrifter」類別的哪個孩子。 –

回答

1

在所有3張桌上使用Join

注:與現場實際名稱替換wp_grand_child實際表名和wg.term_id

SELECT wt.term_id AS oppskrifter_id, wtt.term_id AS child_id, wg.term_id AS grand_child_id 
FROM wp_terms AS wt 
JOIN wp_term_taxonomy AS wtt ON wtt.term_id = wt.term_id 
JOIN wp_grand_child AS wg ON wg.term_id = wtt.term_id 
WHERE wt.name = "Oppskrifter" 
AND wtt.taxonomy = "category"