[英]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
我想排序
所以最終結果應該像這樣
+-------------+--+--------------+-----------+
| 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;
評論:
這可能不是最終的解決方案,我尚未測試過,但可能會給您一些提示。
在開始編寫查詢之前,您沒有正確地分類排序條件。
您不能在ORDER BY
表達式中執行嘗試執行的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.