2014-07-02 35 views
0

帶產品的表格有(非說明)列:availableNow,available1day,available3day, available7day, price如何在按MySQL中每個其他訂單clausule之間的指定行進行排序時多次訂購?

可用性列包含該期間的庫存產品數量,每個期間包括較短前一期間的可用庫存。

# Example row: 
availableNow = 0 
available1day = 4 
available3day = 4 
available7day = 10 
price = 24.75 

如何ORDER的方式將這些行,首先是由price和後較短的時間+ ORDERed的項目,對於後期的項目,他們又是通過ORDERedprice等?

這就是我想出來的,但我很快意識到結果並不是我所期望的。通過可用性,並在通過價格結束這第一個訂單的事......

IF (availableNow > 0, 0, 1) 
, IF (available1day > 0, 0, 1) 
, IF (available3day > 0, 0, 1) 
, IF (available7day > 0, 0, 1) 
, price 

事情是,一旦產品(availableNow > 0, 0, 1),我想通過價格符合行的次序,並不再碰這些行,然後通過IF (available1day > 0, 0, 1)其餘的行的次序並再次按價格排序符合行和不動它了...

# this kind of shows what I want, but result is not what I want 
IF (availableNow > 0, 0, 1), price 
, IF (available1day > 0, 0, 1), price 
, IF (available3day > 0, 0, 1), price 
, IF (available7day > 0, 0, 1), price 

(隨意編輯標題,因爲我不知道如何命名我想要什麼)

+0

你可以把你已經試過的樣本作爲查詢嗎? – rhealitycheck

+0

樣品有...第二個大灰盒子。 –

回答

1

如果我理解正確,如果availableNow更大比你想要訂購的還要多,但是那些小於或等於零的訂單隨後排序。同爲available1day等

如果是這樣的: -

ORDER BY IF(availableNow > 0, 0, 1), availableNow, 
     IF(available1day > 0, 0, 1),available1day, 
     IF(available3day > 0, 0, 1),available3day, 
     IF(available7day > 0, 0, 1),available7day 

編輯。繼續你的解釋,可能是這樣的: -

ORDER BY IF(availableNow > 0, price, 999999999), 
     IF(available1day > 0, price, 999999999), 
     IF(available3day > 0, price, 999999999), 
     IF(available7day > 0, price, 999999999) 

一團糟。想法是,如果現在可用,它使用價格,如果不是999999999(所以那些現在不可用的將在以後出現)。然後對於其他領域也是如此。 999999999只是一個比任何價格都大的數字(選擇這樣一個數字時要小心!)。

+0

不,我會用文字來描述它... 顯示可供訂購的行,然後按價格排序,然後顯示可用的商品並按價格排列,然後顯示可用的商品3天和按價格排序。 .. –

+0

爲您增加了一個進一步的建議。 – Kickstart

+0

謝謝,它看起來很整潔!我很近,我怎麼沒看到它?! :)我把那裏99999,因爲它是最大的DECIMAL可供列... –

相關問題