2016-01-13 102 views
0

我正在爲新貨車系統創建一個選擇和包裝列表,因爲這條路線是最優的,我需要根據我們的產品行的順序對SKU列表進行排序。第一個字母,或前兩個字母表示倉庫中的位置。Mysql - priotize按數字排序的字母排序

因此,有這個名單從排序是這樣的:

ORDER BY IF(sku RLIKE '^[a-z]', 1, 2), sku ASC; 
+-------------+ 
| sku   | 
+-------------+ 
| A3-1-1195 | 
| A3-1-1195 | 
| AA6-8-7117 | 
| AB10-7-6405 | 
| AB10-7-6405 | 
| AB4-4-3487 | 
| AB5-6-3460 | 
| AB6-3-3445 | 
| C1-8-5623 | 
| K1-4-1835 | 
| O7-7-4737 | 
| O8-7-4344 | 
| O8-7-4344 | 
| U1-8-6664 | 
+-------------+ 

編輯:如果所有的數字排序第一優先,然後是數字

我理想中的結果將是。儘管如此,如果第二個字符是數字,它應該按字母順序排序。

+-------------+ 
| sku   | 
+-------------+ 
| AB4-4-3487 | 
| AB5-6-3460 | 
| AB6-3-3445 | 
| AB10-7-6405 | 
| AB10-7-6405 | 
| AA6-8-7117 | 
| A3-1-1195 | 
| A3-1-1195 | 
| C1-8-5623 | 
| K1-4-1835 | 
| O7-7-4737 | 
| O8-7-4344 | 
| O8-7-4344 | 
| U1-8-6664 | 
+-------------+ 

回答

0

你可以嘗試你的領域分成5個領域: NP =您的位置字段 位置=位置CHAR(S) N1的大小=第一號 N2 =第二號 N3 =第三號碼

和sonrt與這些領域。 繼承人沒有表連接(用於測試在查詢瀏覽器中與您的數據)一個例子:

SELECT 
    sku, 
    MID(sku, 1, np) AS position, 
    REPLACE(MID(sku, np+1, 2), '-', '') AS n1, 
    REPLACE(MID(sku, np+3, 2), '-', '') AS n2, 
    REPLACE(MID(sku, np+5, LENGTH(sku)), '-', '') AS n3 
FROM (
    SELECT 
     IF(MID(sku, 2, 1) REGEXP '[0-9]', 1, 2) AS np, 
     s.* 
    #subquery for this test 
    FROM (
     SELECT 'A3-1-1195' AS sku 
     UNION ALL SELECT 'A3-1-1195' 
     UNION ALL SELECT 'AA6-8-7117' 
     UNION ALL SELECT 'AB10-7-6405' 
     UNION ALL SELECT 'AB10-7-6405' 
     UNION ALL SELECT 'AB4-4-3487' 
     UNION ALL SELECT 'AB5-6-3460' 
     UNION ALL SELECT 'AB6-3-3445' 
     UNION ALL SELECT 'C1-8-5623' 
     UNION ALL SELECT 'K1-4-1835' 
     UNION ALL SELECT 'O7-7-4737' 
     UNION ALL SELECT 'O8-7-4344 ' 
     UNION ALL SELECT 'O8-7-4344' 
     UNION ALL SELECT 'U1-8-6664') as s 
) AS s 
ORDER BY np DESC, position, n1, n2, n3 
+0

感謝您的答覆! :-)我已經更新了我的目標,以反映第二個字符應該在alfabetical desc中排序。如果一個數字。 –