2013-03-25 1 views
0

안녕하세요. 필자는 필요한 정보가 포함 된 여러 테이블을 가지고 있으며 올바른 결과를 산출하는 SQL 쿼리를 만들었습니다. 문제는 if 문을 수행 할 테이블 열이 있다는 것입니다.제품에는 테이블, 플랫 또는 무료 배송 요금이 있습니다. 모든 요율을 받으려면 쿼리를 작성하는 방법

사과 : 25 : 15.00,50 : 10.00,100 : 예를 들어 0.00

이 사과 50 요금 10.00 etc..etc ..

오렌지, 최대 15.00 배송비를 청구 25까지 읽고 : 15.00 요금 15

바나나의 고정 요금 : 그래서 기본적으로 내가 각 테이블 속도의 모든 인스턴스에 preg_split()를 수행 한 후 모든 값을 추가 할 수 있도록 0.00 무료

함께 정액 요금과 동일합니다. 적절한 배송 견적을 얻기 위해 테이블 ​​요율 및 고정 요율 그룹을 함께 추가하십시오. 내가 50 개 사과 1000 오렌지와 75 바나나 밖으로 계산합니다 내 운송 총은 이미 내가 테이블 속도

$table_cost = preg_split("^[:,]^" , $rate); 
$size = sizeof($table_cost); 
    for ($i=0, $n=$size; $i<$n; $i+=2) { 
    if ($order_total <= $table_cost[$i]) { 
     $var = $table_cost[$i+1]; 
    } 
    } 
의 각 인스턴스에서 수행 할 코드가 25.00

될를 주문한 그래서 경우

$ rate는 쿼리가 생성하는 테이블 속도의 변수입니다. $ order_total은 제품의 수량, 가격 또는 무게에 대한 변수입니다. 간단하게하기 위해이 질문에 qty를 사용하려고합니다.

답변

0

당신 정말 전체 질문 정규화 규칙을 무시의 결과로 온다, 데이터베이스 스키마를 다시 방문 할 필요. 당신은 당신이 관련시킬 수있는 필드로서 그 데이터를 저장하는 것이 아니라, regex를 실행시키고 자하는 다중 값 필드를 가지고 있습니다.

Here's an SQLFiddle이 경우를 설명합니다. (필자는 MySQL의 구문을 잘 알고 있지 않기 때문에 PgSQL을 사용하게 될 것이므로주의해야 할 필요는 없습니다. 그러나이 두 가지를 매핑하는 것은 꽤 쉬워야합니다.) 또한 데이터베이스 내 "shopping_cart"테이블을 사용하고 있으므로 값의 묶음을 하드 코딩하지 않고도 솔루션의 SQL을 보여줄 수 있습니다. 데이터베이스가 이러한 값을 실증적으로 작동하도록 저장해야 할 필요가 없습니다.

현재 데이터를 정규화 된 구조로 변환하는 데 도움이 필요하면 이러한 종류의 작업을 위해 특별히 설계된 도구가 많이 있습니다. ETL; Wikipedia는 decent list을 가지고 있지만, 개인적으로 매우 강력하고 사용하기 쉬운 오픈 소스 ETL 도구 인 Pentaho's Kettle을 선호합니다.

마지막으로 관계형 데이터베이스를 배우는 데 도움이되는 적절한 리소스를 사용하는 것이 좋습니다. Chris Date's book "SQL and Relational Theory"은 내가 사람들에게 읽게하고 싶은 것이고, 가능하다면 O'Reilly and Associates가 제시 한 video lecture series을 살펴 보자.

+0

정직한 응답에 감사드립니다. 내 코드를 자세히 살펴 보겠습니다. 네, 테이블에 넣기 전에 데이터를 표준화하는 것은 갈 방법입니다! 방금 더 쉬울 거라고 생각 했어. 사실이 아닙니다. – user1493559

+0

이로 인해 데이터베이스 작업을 다시 생각하게되었습니다! 고마워요. 토모로 해결되면 알려 드리겠습니다. – user1493559

0

이 적절한 값

데이터베이스를 작성하는 방법에 나를 계몽을위한

감사합니다 너무 많은 @TML로 해결되었습니다! 여기 코드가 있습니다!

$sql = "select distinct srp.p_rate, srp.p_qty, srp.p_id, cb.customers_basket_quantity \n" 
. "from `shipping_rates_p` srp\n" 
. "join `customers_basket` cb on (cb.customers_basket_quantity <= srp.p_qty and 
cb.products_id = srp.p_id)\n" 
. "join `products` p on p.products_id = srp.p_id \n" 
. "where cb.customers_id=\'3\'\n" 
. "group by srp.p_id\n" 

내가 필요한 적절한 값을 반환합니다!