Pergunta

Eu tenho uma consulta que tem uma lista de valores de base e uma lista de valores de linguagem. Cada valor tem uma chave que corresponda ao outro. Os valores base são armazenadas em uma tabela e os valores de língua em outra. Meu problema é que eu preciso para obter todos os valores de base correspondente removidos a partir da consulta com exceção de um. Então, eu exportar essa consulta em uma planilha do Excel (que posso fazer esta parte fina) e permitir que o usuário editar os valores de idiomas.

Quando as edições do usuário e / ou inserções novos valores de linguagem, eu preciso atualizar o banco de dados, exceto agora escrevendo sobre quaisquer valores correspondentes no banco de dados (como aqueles que foram removidos pela primeira vez).

Na simplicidade, o cliente paga para traduções e se eu pode gerar uma folha que tem menos traduções necessárias (como frases que reaparecem muitas vezes), então eles podem economizar dinheiro, daí o projeto para começar. Eu percebo a desvantagem é que não é uma lista ligada verdadeiro, onde todos correspondência valoriza todos pertencem a uma linha na tabela a linguagem (o que teria sido fácil). Em vez disso, existem vários valores que são idênticos que precisam ser atualizados conforme descrito acima.


Sim, estou confuso sobre isso e é por isso pode parecer um pouco vago. Aqui está um exemplo:

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*

Resultado pretendido (quando consultado)

Tabela 1 item de Description1 item Description2 item Description3 item Description4 item Description5 Item 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)

O usuário faz as suas modificações, incluindo a inserção de dados em linhas em branco (como linha 6 para o idioma), então 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)

Há também uma chave de recurso que corresponde a cada "Item Description" a um único "Item desconto em outra língua". A única vez que eles estão indo cada vez para ver uns aos outros é durante este processo de tradução, todas as outras vezes os valores podem ser diferentes, de modo que as chaves de recurso não pode simplesmente ser alterado para todos os pontos em uma tradução de forma permanente.

Gostaria também de acrescentar, não deve haver nenhuma alteração da estrutura das tabelas ou linhas remoção da tabela.


Ok, aqui está um revisal atualizada do que eu gostaria que a consulta para fazer, mas, obviamente, não faz desde que eu realmente precisa os valores da tabela associada:

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
Foi útil?

Solução 3

Hey obrigado por essa atualização!

Olhando para aquela e adicioná-lo em um post anterior eu finalmente veio com essa:

<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>

Eu percebi que não precisava de um resource_value específico, apenas qualquer que estava lá dentro. Eu também percebi que não precisava da chave de recurso em todos os fora da consulta. A atualização estará atualizando todos os valores de base correspondente, independentemente, então eu realmente não precisa a chave de recurso depois de tudo, o que me permitiu usar o GROUP BY.

Levou um tempo, pena do pobre explicação, mas é isso! :) Obrigado por toda a ajuda.

Outras dicas

Hrm, ainda não é real claro sobre o que a questão realmente é, mas deixe-me dar-lhe um ir.

Tabelas:

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

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

Você deseja recuperar um valor base, e todos os valores de conversão correspondentes que correspondem a esse valor base, exportá-los para o Excel, e, em seguida, re-carregá-los através de uma atualização (eu acho).

SQL para selecionar a data:

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;

Isso vai dar-lhe:

1234    Foo
1235    Bar
1236    Baz

Export que, para excel, e obtê-lo de volta com atualizações:

1234    Goo
1235    Car
1236    Spaz

Você pode então dizer:

UPDATE RESOURCE_VALUES
   SET RESOURCE_VALUE = value_from_spreadsheet
 WHERE RESOURCE_KEY = key_from_spreadsheet

Eu posso ser maneira fora da base sobre esse cara, então deixe-me saber e, se você pode fornecer um pouco mais detalhadamente, eu posso ser capaz de marcar mais perto da marca.

Felicidades!

Se você precisa remover todas as partidas com exceção de um, por que não eliminar toda a correspondência ... combinações ... precisamos de melhores condições ... e, em seguida, inserir o correto. Por exemplo, se você precisa atualizar as partidas entre os itens 12 e 13 na tabela de pares de bases, fazer algo como

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

I podem ser simplificar demais, mas sua descrição parece vago em alguns lugares.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top