2010-07-08 33 views
1

我想知道是否可以通過由子查詢返回的逗號分隔集合來排序?通過逗號分隔列值的Mysql排序

我有以下幾點:

SELECT navigation.id, documents.template_id 
FROM navigation 
INNER JOIN documents 
    ON navigation.document_id = documents.id 
    AND FIND_IN_SET(navigation.id,(SELECT numeric_lineage 
            FROM navigation WHERE id = #id#)) 
ORDER BY ??? 

現在我不能肯定我怎麼會去以相同的順序排序的結果作爲逗號分隔的numeric_lineage設置。可能嗎?如果可能,我寧願不必做另一個子查詢。

感謝

回答

4

您可以使用訂單FIND_IN_SET BY子句:

ORDER BY FIND_IN_SET(navigation.id, (SELECT numeric_lineage 
             FROM navigation WHERE id = #id#)) 
+1

真棒,我不知道這是可能的!我只關心現在有2個子查詢。對於numeric_lineage進行單獨查詢,用字符串替換2個子查詢並使用IN而不是第一個FIND_IN_SET會更有利(服務器負載)嗎?我一直在印象子查詢「是魔鬼」? ;-) – Bjorn 2010-07-08 16:27:45

+0

@Bjorn:如果子查詢非常糟糕,那麼這些功能將被徹底刪除。從維護的角度來看,它有相同的查詢,但MySQL不支持WITH子句(不知道它會支持這一點),所以我沒有看到任何解決方法。 – 2010-07-08 16:29:55

+0

太好了,謝謝你的幫助。非常感謝! :-) – Bjorn 2010-07-08 16:31:15