2017-09-19 54 views
0

我有一個類似下面的表,其中有2列product_id,main_product_id和location。 main_product_id包含主產品的product_id。如何使用mysql中的多個條件進行排序

+-------------+--+--------------+--+-----------+ 
| product_id | | main_prod_id | | location | 
+-------------+--+--------------+--+-----------+ 
| product1 | |    | | AE 34 CH | 
| product2 | |    | | AE 46 CH | 
| product3 | |    | | V   | 
| sub_prod_1 | | product3  | |   | 
| sub_prod_2 | | product3  | |   | 
| sub_prod_3 | | product3  | | AK 22 AUS | 
| sub_prod_4 | | product3  | | CI 06 FR | 
| sub_prod_5 | | product3  | | TA ee ES | 
| sub_prod_6 | | product3  | | V   | 
| product4 | |    | | CT 01 FR | 
| product5 | |    | | V   | 
| sub_prod_7 | | product5  | |   | 
| sub_prod_8 | | product5  | |   | 
| sub_prod_9 | | product5  | | ED 2 ES | 
| sub_prod_10 | | product5  | | EN 02 ES | 
| sub_prod_11 | | product5  | | TB 03 ES | 
| sub_prod_12 | | product5  | | V   | 
+-------------+--+--------------+--+-----------+ 

sub_prod_12產品5 V

我想

  • 首先不在像產品1,產品2和product4的通過位置排序主要產品的產品,(類型1產品)
  • 排序
  • 然後在主產品欄中的產品類似product3,product5,(Type2產品)
  • 每個主要產品後都會有它的子版本oducts按位置排序。(類型的子產品2產品)

所以,最終的結果應該是這樣的

+-------------+--+--------------+-----------+ 
| Product_id | | main_prod_id | location | 
+-------------+--+--------------+-----------+ 
| product1 | |    | AE 34 CH | 
| product2 | |    | AE 46 CH | 
| product4 | |    | CT 01 FR | 
| product3 | |    | V   | 
| sub_prod_1 | | product3  |   | 
| sub_prod_2 | | product3  |   | 
| sub_prod_3 | | product3  | AK 22 AUS | 
| sub_prod_4 | | product3  | CI 06 FR | 
| sub_prod_5 | | product3  | TA ee ES | 
| sub_prod_6 | | product3  | V   | 
| product5 | |    | V   | 
| sub_prod_7 | | product5  |   | 
| sub_prod_8 | | product5  |   | 
| sub_prod_9 | | product5  | ED 2 ES | 
| sub_prod_10 | | product5  | EN 02 ES | 
| sub_prod_11 | | product5  | TB 03 ES | 
| sub_prod_12 | | product5  | V   | 
+-------------+--+--------------+-----------+ 

這有可能是該表可能只有1型產品或類型2和它是次產品或所有類型的產品。

我的查詢到目前爲止以下

SELECT 
    mt.product_id, mt.main_prod_id, mt.location 
FROM 
    my_table mt 
ORDER BY (CASE 
    WHEN 
     mt.product_id NOT IN (SELECT 
       main_prod_id 
      FROM 
       my_table) 
      AND (mt.main_prod_id = '' 
      OR mt.main_prod_id IS NULL) 
    THEN 
     mt.location 
    WHEN 
     mt.product_id IN (SELECT 
       main_prod_id 
      FROM 
       my_table) 
      AND (mt.main_prod_id = '' 
      OR mt.main_prod_id IS NULL) 
    THEN 
     mt.product_id 
    ELSE mt.main_prod_id 
END) ASC , (CASE 
    WHEN 
     mt.product_id NOT IN (SELECT 
       main_prod_id 
      FROM 
       my_table) 
      AND (mt.main_prod_id = '' 
      OR mt.main_prod_id IS NULL) 
    THEN 
     0 
    WHEN 
     mt.product_id IN (SELECT 
       main_prod_id 
      FROM 
       my_table) 
      AND (mt.main_prod_id = '' 
      OR mt.main_prod_id IS NULL) 
    THEN 
     1 
    ELSE 2 
END) ASC , mt.location ASC 

但什麼,我發現了上面的查詢是第一個表。

+0

第二種排序條件中的排序順序是什麼?按'main_prod_id'命令? –

+0

@KIKOSoftware你的意思是這個_then那些在產品欄中的產品,如product3,product5,(Type2產品)_? – user3275493

+0

是的,就是那個。 –

回答

0

你可以試試這個嗎?

SELECT 
    product_id, main_prod_id, location 
FROM 
    my_table 
ORDER BY 
    CONCAT(main_prod_id,product_id), location; 

評論:

  1. 這可能不是最終的解決辦法,我沒有測試它,但它可能給你一些提示。

  2. 在開始編寫查詢之前,您並未正確地整理好排序條件。

  3. 你不能這樣做,你試圖做什麼,在ORDER BY表達式。

+0

我幾乎在那裏用上面的查詢。唯一的問題是我無法將Type 1產品移到頂部並按位置排序,如您在第二個表格中看到的 – user3275493

+0

我知道這一點。那麼當你使用我給的查詢時發生了什麼?不要被它的簡單性所迷惑。我再次改變它,添加了「CONCAT()」。我知道它在任何情況下都不會奏效,但它比你擁有的要好。 –

相關問題