2015-11-05 40 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"