2017-09-19 1 views
0

product_id, main_product_id 및 location이 2 개인 다음과 같은 테이블이 있습니다. 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의 product5의 V 나는 위치에 따라 주문 제품 1, 제품 2 및 product4입니다 같은 주요 제품에없는

  • 먼저 제품 (타입 1 제품)
  • 을 정렬 할

  • 그 다음 주 제품 열에있는 제품 3, 제품 5, (Type2 제품)
  • 각 제품 다음에 sub pr oducts의 위치에 의해 명령했다. (서브 타입의 제품이 제품)

을 따라서 최종 결과는 같아야이

+-------------+--+--------------+-----------+ 
| 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 제품 3, 제품 5, (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()'를 추가했다. 나는 그것이 모든 상황에서 완벽하게 작동하지 않을 것이라는 것을 알고 있지만 당신이 가지고있는 것보다 낫습니다. –

관련 문제