2016-07-27 2 views
0

Magento 데이터베이스에 "New From"이 있지만 "New To"가없는 제품을 찾기 위해 쿼리를 만들었습니다.innerjoin 및 동적 업데이트로 선택

SELECT 
catalog_product_entity.entity_id, 
catalog_product_entity.sku, 
a.value as New_From, 
b.value as New_To 
FROM `catalog_product_entity` 
INNER JOIN catalog_product_entity_datetime as a on a.entity_id = catalog_product_entity.entity_id and a.attribute_id = '93' 
INNER JOIN catalog_product_entity_datetime as b on b.entity_id = catalog_product_entity.entity_id and b.attribute_id = '94' 
WHERE a.value IS NOT NULL AND b.value IS NULL 

는 이제이 쿼리 폐쇄에 UPDATE 문을 실행하는 500 개 항목을 우려하기 때문에 무엇을 달성 할 싶습니다 "새로운 방법"1개월 가진 후 열려.

어떤 아이디어로 실행하나요?

그래서 명확하게 :

표 1 : (catalog_product_entity)

| entity_id | sku | 
| --------- | --- | 
|  1  | ABC | 
|  2  | DEF | 

표 2 : (catalog_product_entity_datetime) 나는 테이블 2의 NULL 값을 업데이트 할

| id | entity_id | attribute_id |   value   | 
| --- | --------- | ------------ |   -----   | 
| 1 |  1  |  93  | 2013-06-12 00:00:00 | 
| 2 |  1  |  94  | 2013-07-12 00:00:00 | 
| 3 |  1  |  98  | Some other attribute | 
| 4 |  2  |  93  | 2014-08-20 00:00:00 | 
| 5 |  2  |  94  |  NULL   | <- This I want updating 
| 6 |  2  |  98  | Some other attribute | 

같은 테이블의 날짜 + 1 개월. 내 검색 반환 :

| entity -id | sku |  New_From  |  New_To   | 
| ----------- | --- | ------------------- | ------------------- | 
|  2  | DEF | 2014-08-20 00:00:00 |   NULL   | 

그래서 나는 New_From + 1 개월 해당 필드를 업데이트하는 쿼리를 작성하고 싶습니다. 내 마음에

| entity -id | sku |  New_From  |  New_To   | 
| ----------- | --- | ------------------- | ------------------- | 
|  2  | DEF | 2014-08-20 00:00:00 | 2014-09-20 00:00:00 | 

나는 이런 일에 종료됩니다 (하지만이 하나가 작동하지 않습니다)

UPDATE catalog_product_entity_datetime 
SET value = TIMESTAMP(a.value+300000000) 
INNER JOIN catalog_product_entity_datetime as a on a.entity_id = catalog_product_entity_datetime.entity_id and a.attribute_id = '93' 
WHERE attribute_id=94 
+0

당신은 질문 우리에게 몇 가지 샘플 데이터와 원하는 결과를 보여주십시오. – Blank

+0

@JPG를 설명 할 수있는 테이블을 추가했습니다. – Jacco

답변

0

이 시도 :

UPDATE catalog_product_entity_datetime t1 
JOIN catalog_product_entity t2 
ON t1.entity_id = t2.entity_id 
AND t1.attribute_id = 94 
JOIN catalog_product_entity_datetime t3 
ON t2.entity_id = t3.entity_id 
AND t3.attribute_id = 93 
SET t1.value = CASE WHEN t1.value IS NULL THEN date_add(t3.value, interval 1 month) 
        ELSE t1.value END 
; 

Demo Here