2010-08-31 243 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 ... 
相關問題