2012-03-13 35 views
0

我希望有人可以給我一個關於這個問題的大方向:MySQL:將多個MAX()選擇與數組結合的最佳方式?

起點是db記錄的ID數組。

array ids = [45,23,14,7]; 

這些記錄對一些列,即

id,price,rating 
7,$5.00,5 
14,$2.00,4 
23,$5.00,2 
45,$5.00,5 

我需要是

  1. 與MAX(PRICE)(或東西等效)的項目。
  2. 如果存在多個價格相同的物品,請獲取最大(評級)(或等價物)的物品。
  3. 最後,如果仍有多個項目,則取數組中第一個。

我特別堅持第3點。有沒有辦法在(我的)SQL中做到這一點,或者我應該在代碼中做到這一點?

謝謝您的閱讀。

+1

嗯,其實如果你想'先在array'則數組是以某種方式訂購的。所以解決方案是在SQL中應用相同的排序條件 – 2012-03-13 20:46:29

+0

是的,數組的順序沒有問題。但是我不確定結果是否會保持這個順序,或者我得到結果後如何應用該順序。 – marimba 2012-03-13 20:48:38

回答

1

除了答覆@jasonlfunk你可以添加一個額外爲了子句來考慮你的陣列,以及:

SELECT * FROM table WHERE id IN (45,23,14,7) ORDER BY price DESC, rating DESC, FIELD(id,45,23,14,7) ASC LIMIT 1 
+0

你是對的,額外的訂單條款是訣竅。謝謝你們的幫助! – marimba 2012-03-14 11:19:31

2

像這樣的東西應該工作:

SELECT * FROM table WHERE id IN (45,23,14,7) ORDER BY price DESC, rating DESC LIMIT 1 
+0

當然,我的天啊!比我想象的要簡單得多。謝謝你1000倍! – marimba 2012-03-13 20:55:35

+0

不客氣。您應該將答案標記爲已接受。 :) – jasonlfunk 2012-03-13 20:57:28

+0

對不起,遲到的答覆,不得不先測試...我是你的標記它,但似乎有一個最小時間限制,直到接受。無論如何,當添加FIELD()來保存數組順序時,atkaye是正確的,所以公平地說,我必須給他接受:) – marimba 2012-03-14 11:18:28

0

...我想你點3 ..它必須代碼來完成,MySQL的結果不一定返回的順序或排列結果,如果通過價格申請訂單,那麼通過評級仍然返回多個項目,您的代碼應該能夠接收列表而不是單個行,然後在代碼中進行比較。