사용

2012-03-16 5 views
1

이 내 테이블 정의입니다 :사용

CREATE TABLE orders_total (
    orders_total_id int unsigned NOT NULL auto_increment, 
    orders_id int NOT NULL, 
    title varchar(255) NOT NULL, 
    text varchar(255) NOT NULL, 
    value decimal(15,4) NOT NULL, 
    class varchar(32) NOT NULL, 
    sort_order int NOT NULL, 
    PRIMARY KEY (orders_total_id), 
    KEY idx_orders_total_orders_id (orders_id) 
); 

인구 표는이 같은 (내 기억에서 모든 만들어 낸 숫자)를 볼 수 있습니다

1 - 13 - Shipping - $7.50 - 7.50 - ot_shipping - 2 
2 - 13 - Tax  - $8.00 - 8.00 - ot_tax  - 4 
3 - 13 - Total - $56.67 - 56.67 - ot_total - 3 
4 - 14 - Shipping - $5.55 - 5.55 - ot_shipping - 2 
5 - 14 - Discount - $6.40 - 6.40 - ot_discount - 1 
6 - 14 - Coupon - $10.00 - 10.00 - ot_coupon - 5 
7 - 14 - Total - $150.25 - 150.25 - ot_total - 3 

모든 주문에는 다른 클래스가있을 수 있으며 모든 주문에는 정확한 클래스 수가 있어야하는 것은 아닙니다.

  • 주문 (2)는 다음과 같은 클래스를 가질 수 ot_total ot_shipping, ot_tax : 다음 수업을 할 수

    1. 주문 1 : 예를 들어 ot_shipping, ot_total, ot_coupon, ot_discount
    2. ...

    "주문"테이블 (여기 표시되지 않음)을 쿼리하고 위 테이블 (orders_total)을 조인하고 "클래스"가 "ot_total", " ot_coupon "또는"ot_discount ". 결과

    첫 번째 세트 : 결과의

    orders_id  => 13 
    customers_name => John Doe 
    values   => 7.50,8.00,56.67 
    

    두 번째 세트

    SELECT o.orders_id, o.customers_name, group_concat(ot.value) AS values 
    FROM orders o 
    LEFT JOIN orders_total ot 
    ON ot.orders_id = o.orders.id 
    GROUP BY o.orders_id 
    

    위의 쿼리가 같은 것을 생산하는 것입니다 : 여기

    는 이러한 쿼리를 작성에서 내 시도 :

    orders_id  => 14 
    customers_name => Jane Roe 
    values   => 5.55,6.40,10.00,150.25 
    

    보시다시피 필자가 원하는 값을 얻을 수는 있지만 어떤 숫자가 어떤 클래스에 속하는지 알 수 없습니다. 나는 ot_total, ot_discount 및 ot_coupon에만 관심이 있습니다.

    아무도 해결책을 생각할 수 있습니까?

    어쨌든 클래스 이름을 값에 추가 할 수 있습니까? 그래서 값 같은 것을 가질 수 => ot_shippimh7.50, ot_tax8.00, ot_total56.67

  • 답변

    0

    이 할 수 있습니다 : BTW

    SELECT o.orders_id, o.customers_name, 
         GROUP_CONCAT(CONCAT(ot.class, ot.value)) AS values 
    FROM orders o 
    LEFT JOIN orders_total ot 
    ON ot.orders_id = o.orders.id 
    WHERE ot.class in ("ot_total", "ot_coupon", "ot_discount") 
    GROUP BY o.orders_id 
    

    을 : 클래스 필드를 제거하여 당신은 더 잘 할 수 orders_total에서 Classes이라는 새 테이블을 추가하고 클래스 목록이 포함 된 다음이 테이블에 외래 키 참조를 orders_total에 추가하십시오.

    +0

    매우 유망 해 보입니다. 나는 내일 직장에서 그것을 분명히 시도 할 것이다. 그런데 데이터베이스를 만들지 않았습니다. 이것은 고대의 [osCommerce] (http://www.oscommerce.com/) 응용 프로그램에서 왔습니다 :) 감사합니다. – farjam