如何在mysql

时间:2017-09-19 08:03:51

标签: 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

我想排序

  • 首先是不在主要产品中的产品,如产品1,产品2和产品4按地点排序,(Type1产品)
  • 然后是产品列中的产品,如product3,product5,(Type2 products)
  • 在每个主要产品之后,将按位置订购它的子产品。(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

但是通过上面的查询,我得到的是第一个表格。

1 个答案:

答案 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表达式中执行此操作。