2010-08-31 127 views
1

我有4个表:SELECT * FROM表WHERE领域IN(SELECT ID FROM表ORDER BY域2)

categories - id, position 
subcategories - id, categories_id, position 
sub_subcategories - id, subcategories_id, position 
product - id, sub_subcategories_id, prod_pos 

现在我在做测试,以找出什么地方错了我的查询。

所以我想选择sub_subcategories,并获得成才这样的:

[[1,2,3,4,5,6], [1,2,3,4,5,6,7]], [[1,2,3,4,5,6], [1,2,3,4]] 

每个[]手段:大 - 类,小 - 子类别和数量都在sub_subcategories位置。我想[]通过他们的 “位置” 字段顺序,因此查询:

SELECT id FROM sub_subcategories_id 
WHERE subcategories_id IN (
     SELECT id 
     FROM subcategories_id 
     WHERE categories_id IN (
      SELECT id FROM categories 
      WHERE id = 'X' ORDER BY position) 
      ORDER BY position) 
ORDER BY position 

是某种错误的,因为我得到:

1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,6,6,6,7 

说不上来为什么 - 不过去的 “ORDER BY位置” 摧毁一切?

+0

作为TIPP看看在http:/ /dev.mysql.com/tech-resources/articles/hierarchical-data.html – teemitzitrone 2010-08-31 12:21:57

回答

4

你需要在最外面的查询中应用所有你想要的顺序 - 子查询中的顺序没有任何意义 - 问题“这个ID是<这个列表中的>?”具有相同的答案,不管该列表在什么顺序(实际上,更多的属性,<这个列表>是一个集合,它没有顺序)。

因此,您需要在最外面的查询中获取所需的所有列。

喜欢的东西:

SELECT ssi.ID 
from 
    sub_subcategories_id ssi 
     inner join 
    subcategories_id si 
     on 
      ssi.subcategories_id = si.id 
     inner join 
    categories c 
     on 
      si.categories_id = c.id 
where 
    c.id = 'X' 
order by 
    c.position, 
    si.position, 
    ssi.position 
0

目前的情况是,你的查询将不会返回一个数字的“设置”按原样。如果忽略所有的子查询,你基本上做的:

SELECT id FROM sub_subcategories_id 
ORDER BY position 

这将只返回一个列:sub_sub_categories_id。你会更好地做这样的事情:

SELECT cat.id, subcat.id, subsubcat.id 
FROM sub_sub_categories AS subsubcat 
LEFT JOIN sub_categories AS subcat ON subcat.id = subsubcat.subcategories.id 
LEFT JOIN categories AS cat ON cat.id = subcat.category_id 
WHERE (cat.id = 'X') 
ORDER BY cat.id, subcat.id, subsubcat.id 

这将返回由各种ID排序的3列。如果您不需要单独sub_sub_categories价值观,只是希望他们作为一个字符串值,你可以用GROUP_CONCAT(),做分组的各个位勾搭:

SELECT cat.id, subcat.id, GROUP_CONCAT(subsubcat.id) 
    FROM ... 
    ... 
    WHERE (cat.id = 'X') 
    GROUP BY cat.id, subcat.id, subsubcat.id 
    ORDER BY ... 
相关问题