繁体   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