2010-08-27 23 views
2

所以,我想創建一個按照流行度排序的公式,但我不想創建一個存儲過程或函數。我想這個函數只是在我的查詢中。MySQL:我如何使用ORDER BY進行內聯函數?

那麼,有沒有辦法做到像

SELECT cols 
FROM tables 
WHERE conditions 
ORDER BY function(){ logic using cols } DESC LIMIT 10 

或類似的東西?

+0

是什麼邏輯是什麼樣子? – NullUserException 2010-08-27 16:32:01

+0

人氣如何確定? – Bernard 2010-08-27 16:35:05

+0

還沒有想出來。但它會在三個不同的列上進行數學運算。 – NullVoxPopuli 2010-08-27 17:39:12

回答

2

我不想創建一個存儲過程或函數

你要調用一個函數,但你不希望定義一個函數?好吧...

可以在ORDER使用表達式BY子句,包括CASE這是非常強大:

SELECT cols 
FROM tables 
WHERE conditions 
ORDER BY CASE WHEN col1 BETWEEN a AND b THEN 1 
       WHEN col1 BETWEEN c AND d THEN 2 
       ... 
     END 
    DESC LIMIT 10 

但它往往更容易做的,在你的選擇列表中的計算,然後順序計算列:

SELECT cols, POW(col1, col2) AS calc1 
FROM tables 
WHERE conditions 
ORDER BY calc1 DESC LIMIT 10 
相關問題