2008-10-15 2 views
0

기본 값 목록과 언어 값 목록이있는 쿼리가 있습니다. 각 값에는 다른 값과 일치하는 키가 있습니다. 기본 값은 하나의 테이블에 저장되고 언어 값은 다른 테이블에 저장됩니다. 내 문제는 하나를 제외하고 모든 일치하는 기본 값을 QUERY에서 제거해야한다는 것입니다. 그런 다음이 쿼리를 Excel 스프레드 시트로 내보내고 (이 부분을 잘 수행 할 수 있음) 사용자가 언어 값을 편집 할 수있게합니다.두 테이블의 일치하는 값 쿼리 (SQL 및 ColdFusion)

사용자가 새 언어 값을 편집하거나 삽입 할 때 데이터베이스에서 일치하는 값 (처음 제거 된 값)을 덮어 쓰지 않고 데이터베이스를 업데이트해야합니다.

간명함에 따라 클라이언트는 번역료를 지불하고 필요한 번역 수가 적은 시트를 생성 할 수 있으면 (예 : 자주 나타나는 문구처럼) 돈을 절약 할 수 있으므로 프로젝트를 시작할 수 있습니다. 단점은 그것이 진정으로 연결된 목록이 아니라는 것입니다. 모든 일치하는 값은 모두 언어 테이블의 한 행에 속합니다 (쉬운 일이었을 것입니다). 대신 위에서 설명한대로 업데이트해야하는 동일한 여러 값이 있습니다.


그래, 난 조금 애매 보일 수 있습니다 이유입니다 거기에 혼란 스러워요. 다음은 샘플입니다 :

Table 1 
Item Description1 
Item Description2 
Item Description3 
Item Description2 
Item Description2 
Item Description4 
Item Description5 
Item Description6 
Item Description3 

Table 2 
Item Desc in other Language1 
Item Desc in other Language2 
Item Desc in other Language3 (blank) 
Item Desc in other Language3 
Item Desc in other Language4 
Item Desc in other Language5 
*blank* 

원하는 결과

표 1 항목 설명 1 항목 설명 2 항목 Description3 항목 Description4 항목 Description5 항목 Description6

Table 2 
Item Desc in other Language1 
Item Desc in other Language2 
Item Desc in other Language3 (filled by matching row in Table 2) 
Item Desc in other Language4 
Item Desc in other Language5 
Item Desc in other Language6 (blank, returned as empty string) 

사용자를 (조회 때) 빈 행에 데이터 삽입 (예 : ro 다음 언어에 대한 6) w reuploads :

Table 1 
Item Description1 
Item Description2 
Item Description3 
Item Description2 
Item Description2 
Item Description4 
Item Description5 
Item Description6 
Item Description3 

Table 2 
Item Desc in other Language1 
Item Desc in other Language2 
Item Desc in other Language3 (now matches row below) 
Item Desc in other Language3 
Item Desc in other Language4 
Item Desc in other Language5 
Item Desc in other Language6 (new value entered by user) 

또한 하나의 "다른 언어의 항목 제품 설명"을 각각 "항목 설명"과 일치하는 자원 키가 있습니다. 그들이 서로를 보게 될 유일한 시간은이 변환 프로세스 동안이며 다른 모든 시간은 값이 다를 수 있으므로 리소스 키를 한 변환에서 영구적으로 모든 포인트로 변경할 수 없습니다.

테이블의 구조를 변경하거나 테이블의 행을 제거하지 않아야합니다. 당신이 필요한 경우

SELECT pe.prodtree_element_name_l, rs.resource_value, pe.prodtree_element_name_l_rk 
FROM prodtree_element pe 
     LEFT JOIN resource_shortstrings rs 
      ON pe.prodtree_element_name_l_rk = rs.resource_key 
     WHERE rs.language_id = '5' 
      AND pe.prodtree_element_name_l <> '' 
     GROUP BY pe.prodtree_element_name_l 

답변

0

안녕하세요. 업데이트 해 주셔서 감사합니다. 그 살펴보면 및 이전 포스트로 추가

드디어이 함께했다 :

<cfquery name="getRows" datasource="XXXX"> 
    SELECT pe.prodtree_element_name_l, MAX(rs.resource_value) AS resource_value 
    FROM prodtree_element pe 
    LEFT JOIN resource_shortstrings rs 
     ON pe.prodtree_element_name_l_rk = rs.resource_key 
    WHERE rs.language_id = '5' 
     AND pe.prodtree_element_name_l <> '' 
    GROUP BY prodtree_element_name_l 
</cfquery> 

가 나는 특정 resource_value 필요하지 않았다 실현, 그냥 거기에 있었다 그. 또한 쿼리 외부에서 리소스 키가 전혀 필요 없다는 것을 알게되었습니다. 업데이트는 관계없이 모든 일치하는 기본 값을 업데이트하므로 결국 GROUP BY를 사용할 수있는 리소스 키가 필요하지 않습니다.

잠시 시간을내어 가난한 설명을 드려 죄송합니다. :) 모든 도움에 감사드립니다.

0

:


좋아, 여기에 내가 실제로 조인 된 테이블의 값을 필요로하기 때문에하지 않는 분명 내가 할 수있는 쿼리를 싶은 것이의 업데이트 revisal하지만 하나를 제외한 모든 일치 항목을 제거하십시오. 일치하는 항목을 모두 지우지 마시고 더 나은 조건이 필요합니다 ... 올바른 항목을 삽입하십시오. EG, 당신은 기본 쌍 테이블에서 항목 12과 13 사이의 일치를 업데이트해야하는 경우, 내가 지나치게 단순화 할 수있다

delete from matchtable where (id1 = 12 and id2 = 13) or (id1 = 13 and id2 = 13); 
insert into matchtable (id1, id2) values (12, 13); 

같은 것을 할,하지만 설명 장소에서 모호한 것 같다.

1

Hrm, 문제의 진정한 의미는 아직 명확하지 않지만 나에게 알려줘.

테이블 :

 
BASE_VALUES 
------------------ 
BASE_VALUE_RK 
BASE_VALUE_NAME 

RESOURCE_VALUES (these are the translations, I'm guessing) 
----------------------- 
RESOURCE_KEY 
RESOURCE_LANGUAGE_ID 
RESOURCE_VALUE 

당신은 하나 개의 기본 값을 검색하려면, 그 기본 값과 일치하는 모든 해당 변환 값은, 그들 Excel로 내 보낸 다음 (내 생각) 업데이 트를 통해 그들을 다시로드 . 엑셀하는

 
1234 Foo 
1235 Bar 
1236 Baz 

수출 및 업데이트와 함께 다시 그것을 얻을 :

 
SELECT bv.BASE_VALUE_RK, rv.RESOURVE_VALUE 
    FROM BASE_VALUE bv, RESOURCE_VALUE rv 
WHERE bv.BASE_VALUE_RK = rv.RESOURCE_KEY 
    AND rv.resource_language_id = '5' 
ORDER BY 1; 

그것은 당신에게주지 :

SQL 데이터를 모두 선택합니다

 
1234 Goo 
1235 Car 
1236 Spaz 

을 당신 다음과 같이 말할 수 있습니다 :

 
UPDATE RESOURCE_VALUES 
    SET RESOURCE_VALUE = value_from_spreadsheet 
WHERE RESOURCE_KEY = key_from_spreadsheet 

나는이 녀석에게 근심 거리가 될지 모르지만 알려 주시면 조금 자세히 설명해 주시면 점수에 더 가까워 질 수 있습니다.

건배!