2016-01-12 23 views
2

使用下面的示例,這不是確切的代碼,只是我試圖實現的一個示例:我可以使用從SELECT子句中的子查詢返回的列來對結果進行排序嗎?

該查詢將用於返回五個最常訪問的頁面,該頁面有多少次訪問註冊。

SELECT 
    page_instance.name AS 'page name', 

    /* Sub Query I wish to sort by */ 
    (
     SELECT COUNT(*) 
     FROM visitor_event 
     WHERE page_instance.id = visitor_event.item_id 
    ) AS 'visit count' 

    FROM item_event 

    LEFT JOIN visitor_event_type ON visitor_event_type.id = visitor_event_type_id 
    LEFT JOIN page_instance ON page_instance.id = visitor_event.item_id 
    LEFT JOIN page ON page.id = page_instance.page_id 

    WHERE visitor_event_type.handle = 'viewed' 
    AND page_instance.name != 'NULL' 
    GROUP BY page.id 
    ORDER BY 'visit count' DESC /* Where its going wrong */ 
    LIMIT 5 

當前,查詢運行時沒有錯誤,但不會按「訪問計數」列進行排序。

我見過類似的查詢,把子查詢放在FROM子句中。我不明白這個原因,因爲我可能想要其他子查詢(對於最大/最小結果等)的其他列。我不反對這個想法,我只是不明白其所以然它

回答

2

這樣做:

SELECT temp.* FROM (SELECT 
    page_instance.name AS 'page name', 
    (
     SELECT COUNT(*) 
     FROM visitor_event 
     WHERE page_instance.id = visitor_event.item_id 
    ) AS 'visit_count' 

    FROM item_event 

    LEFT JOIN visitor_event_type ON visitor_event_type.id = visitor_event_type_id 
    LEFT JOIN page_instance ON page_instance.id = visitor_event.item_id 
    LEFT JOIN page ON page.id = page_instance.page_id 

    WHERE visitor_event_type.handle = 'viewed' 
    AND page_instance.name != 'NULL' 
    GROUP BY page.id 
    LIMIT 5) as temp ORDER BY temp.visit_count DESC 
+0

心靈=燒斷。那很快。謝謝。我實際上不能接受這個答案9分鐘。 – Mongo0se

+0

@ Mongo0se歡迎.. –

相關問題