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
입니다하지만지고있어 어떤 위의 쿼리와 함께 첫 번째 테이블이다.
두 번째 정렬 조건의 정렬 순서는 무엇입니까? 'main_prod_id'에 의해 주문됩니까? –
@KIKOSoftware 제품 3, 제품 5, (Type2 제품) _과 같은 주요 제품 열에있는 제품을 의미합니까? – user3275493
예, 그 중 하나입니다. –