Frage

Ich habe eine Abfrage, die eine Liste von Basiswerten und eine Liste der Sprachwerte hat. Jeder Wert hat einen Schlüssel, mit dem anderen übereinstimmt. Die Grundwerte sind in einer Tabelle und die Sprachwerte in einem anderen gespeichert. Mein Problem ist, dass ich alle passenden Basiswerten aus dem QUERY entfernt bekommen mit einer Ausnahme. Dann habe ich exportieren diese Abfrage in eine Excel-Tabelle (ich kann diesen Teil tun fein) und ermöglichen dem Benutzer die Sprachwerte zu bearbeiten.

Wenn die Benutzer Änderungen und / oder fügt neue Sprachwerte, ich brauche jetzt die Datenbank zu aktualisieren, außer in der Datenbank über alle Anpassungswerte zu schreiben (wie jene, die zum ersten Mal entfernt wurden).

In der Einfachheit zahlt der Kunde für Übersetzungen und wenn ich ein Blatt erzeugen kann, die weniger Übersetzungen benötigt hat (wie Phrasen, die oft wieder), dann können sie Geld sparen, damit das Projekt zu beginnen. Mir ist klar, der Nachteil ist, dass es nicht um eine echte verknüpfte Liste, in der alle vorhandenen Attribut-Werte alle in der Sprachtabelle zu einer Zeile gehören (was leicht gewesen wäre). Stattdessen gibt es mehrere Werte, die identisch sind, die, wie oben beschrieben aktualisiert werden müssen.


Ja, ich bin verwirrt darauf, weshalb es vielleicht ein wenig vage erscheinen. Hier ist ein Beispiel:

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*

Gewünschtes Ergebnis (bei Abfrage)

Tabelle 1     Artikel Description1     Artikel Description2     Artikel Beschreibung3     Artikel Beschreibung4     Artikel Beschreibung5     Artikel 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)

Der Benutzer macht ihre Modifikationen, einschließlich Daten in leere Zeilen (wie Zeile 6 für die Sprache) dann reuploads Einfügen:

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)

Es gibt auch einen Ressourcenschlüssel, die jede „Element Beschreibung“ paßt zu einem einzigen „Item Desc in anderen Sprachen“. Das einzige Mal, dass sie gehen werden, einander zu sehen ist während dieser Übersetzungsprozess, alle anderen Zeiten die Werte können unterschiedlich sein, so dass die Ressourcenschlüssel kann nicht einfach an einer Übersetzung permanent an alle Punkt geändert werden.

Ich möchte auch hinzufügen, sollte es keine Änderung der Struktur der Tabellen oder Entfernen von Zeilen der Tabelle sein.


Ok, hier ist ein aktualisierter revisal von dem, was ich die Abfrage, tun würde, aber offensichtlich nicht tun, da brauche ich eigentlich die Werte der verknüpften Tabelle:

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
War es hilfreich?

Lösung 3

Hey danke für das Update!

an, dass die Suche und in eine frühere Post Zugabe kam ich endlich mit auf dem Punkt:

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

ich merkte, ich habe keine bestimmte resource_value benötigen, nur einer, der da drin war. Ich erkennen auch, dass ich nicht bei allen außerhalb der Abfrage die Ressourcenschlüssel benötigen. Das Update wird unabhängig alle die passenden Basis Werte zu aktualisieren, so dass ich brauchte doch nicht wirklich den Ressourcenschlüssel, die mir erlaubt, die GROUP BY zu verwenden.

Es dauerte eine Weile, sorry für die schlechte Erklärung, aber das ist es! :) Vielen Dank für all die Hilfe.

Andere Tipps

Hrm, noch nicht wirklich klar, was das Problem wirklich ist, aber lassen Sie mich es zu gehen.

Tabellen:

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

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

Sie möchten einen Grundwert abzurufen, und alle Übersetzungswerten entsprechen, die diesen Grundwert entsprechen, exportieren, zu übertreffen und sie dann über ein Update neu laden (glaube ich).

SQL-Daten SELECT aus:

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;

Das gibt Ihnen:

1234    Foo
1235    Bar
1236    Baz

Export, die zu übertreffen und bekommt es mit Updates zurück:

1234    Goo
1235    Car
1236    Spaz

Sie können dann sagen:

UPDATE RESOURCE_VALUES
   SET RESOURCE_VALUE = value_from_spreadsheet
 WHERE RESOURCE_KEY = key_from_spreadsheet

Ich kann so seine off base auf diesem Kerl, so lassen Sie mich weiß, und wenn Sie ein wenig mehr Details zur Verfügung stellen können, ich in der Lage sein kann, näher an die Marke zu erzielen.

Cheers!

Wenn Sie alle Spiele mit einer Ausnahme entfernen müssen, warum nicht alle die passende löschen ... Spiele ... wir brauchen bessere Bedingungen ... und legen Sie die richtige ist. Zum Beispiel, wenn Sie die Spiele zwischen den einzelnen Posten 12 und 13 in der Basenpaar-Tabelle aktualisieren müssen, so etwas wie

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

Ich kann vereinfachend, aber Ihre Beschreibung scheint stellenweise vage.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top