valores correspondentes de dois consulta tabelas (SQL e ColdFusion)
-
03-07-2019 - |
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
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.