Domanda

Ho una query che ha un elenco di valori di base e un elenco di valori di lingua. Ogni valore ha una chiave che corrisponde all'altra. I valori di base sono memorizzati in una tabella e i valori della lingua in un'altra. Il mio problema è che devo rimuovere tutti i valori di base corrispondenti da QUERY tranne uno. Quindi, esporto quella query in un foglio di calcolo Excel (posso fare bene questa parte) e consentire all'utente di modificare i valori della lingua.

Quando l'utente modifica e / o inserisce nuovi valori di lingua, devo aggiornare il database tranne ora scrivere su qualsiasi valore corrispondente nel database (come quelli che sono stati rimossi la prima volta).

Per semplicità, il cliente paga per le traduzioni e se riesco a generare un foglio con meno traduzioni necessarie (come frasi che riappaiono spesso), possono risparmiare denaro, da cui il progetto all'inizio. Mi rendo conto che il rovescio della medaglia è che non è un vero elenco di collegamenti, in cui tutti i valori corrispondenti appartengono tutti a una riga nella tabella della lingua (che sarebbe stato facile). Esistono invece più valori identici che devono essere aggiornati come descritto sopra.


Sì, ne sono confuso ed è per questo che potrebbe sembrare un po 'vago. Ecco un esempio:

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*

Risultato desiderato (quando richiesto)

Tabella 1     Voce Descrizione 1     Voce Descrizione 2     Descrizione articolo 3     Descrizione articolo 4     Descrizione articolo 5     Descrizione articolo6

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)

L'utente apporta le proprie modifiche, incluso l'inserimento di dati in righe vuote (come la riga 6 per la lingua), quindi esegue nuovamente il caricamento:

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)

Esiste anche una chiave di risorsa che corrisponde a ciascuna " Descrizione articolo " a un singolo "Articolo Desc in altra lingua". L'unica volta che si incontreranno mai durante questo processo di traduzione, tutte le altre volte i valori potrebbero essere diversi, quindi le chiavi delle risorse non possono semplicemente essere cambiate in modo permanente in una sola traduzione.

Dovrei anche aggiungere, non ci dovrebbero essere alterazioni della struttura delle tabelle o rimozione delle righe della tabella.


Ok, ecco una rivisitazione aggiornata di quello che mi piacerebbe fare la query, ma ovviamente non lo faccio poiché ho davvero bisogno dei valori della tabella unita:

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
È stato utile?

Soluzione 3

Ehi, grazie per l'aggiornamento!

Osservandolo e aggiungendolo in un post precedente, ho finalmente trovato questo:

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

Mi sono reso conto che non avevo bisogno di un valore_risorsa specifico, ma solo di quello che c'era. Mi sono anche reso conto che non avevo bisogno della chiave di risorsa al di fuori della query. L'aggiornamento aggiornerà TUTTI i valori di base corrispondenti, quindi non avevo davvero bisogno della chiave di risorsa, il che mi ha permesso di utilizzare GROUP BY.

Ci è voluto un po ', scusami per la scarsa spiegazione, ma è così! :) Grazie per tutto l'aiuto.

Altri suggerimenti

Hrm, non è ancora molto chiaro su quale sia veramente il problema, ma lasciami fare un tentativo.

Tavoli:

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

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

Desideri recuperare un valore di base e tutti i valori di traduzione corrispondenti che corrispondono a quel valore di base, esportarli in Excel, quindi ricaricarli tramite un aggiornamento (credo).

SQL per SELEZIONARE i dati:

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;

Questo ti darà:

1234    Foo
1235    Bar
1236    Baz

Esportalo in Excel e ripristinalo con gli aggiornamenti:

1234    Goo
1235    Car
1236    Spaz

Puoi quindi dire:

UPDATE RESOURCE_VALUES
   SET RESOURCE_VALUE = value_from_spreadsheet
 WHERE RESOURCE_KEY = key_from_spreadsheet

Potrei essere molto diverso da questo ragazzo, quindi fammi sapere e, se puoi fornire un po 'più di dettagli, potrei essere in grado di segnare più vicino al segno.

Cheers!

Se devi rimuovere tutte le corrispondenze tranne una, perché non eliminare tutte le corrispondenze ... corrispondenze ... abbiamo bisogno di termini migliori ... e quindi inserire quella corretta. Ad esempio, se è necessario aggiornare le corrispondenze tra gli articoli 12 e 13 nella tabella delle coppie di basi, fare qualcosa del genere

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

Forse sto semplificando troppo, ma la tua descrizione sembra vaga in alcuni punti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top