簡體   English   中英

如何在mysql中用多個條件排序

[英]How to sort with multiple conditions in mysql

我有一個類似以下的表格,其中有2列product_id,main_product_id和location。 main_product_id包含主要產品的product_id。

+-------------+--+--------------+--+-----------+
| 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 product5 V

我想排序

  • 首先,不在該地點訂購的主要產品中的產品(例如product1,product2和product4)(類型1產品)
  • 然后是主要產品列中的產品,例如product3,product5,(Type2產品)
  • 每個主要產品之后,都會有按位置訂購的子產品。(類型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

但是通過上面的查詢,我得到的是第一個表。

你可以試試看嗎?

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

評論:

  1. 這可能不是最終的解決方案,我尚未測試過,但可能會給您一些提示。

  2. 在開始編寫查詢之前,您沒有正確地分類排序條件。

  3. 您不能在ORDER BY表達式中執行嘗試執行的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM