Question

J'ai une requête qui contient une liste de valeurs de base et une liste de valeurs de langage. Chaque valeur a une clé qui correspond à l'autre. Les valeurs de base sont stockées dans une table et les valeurs de langue dans une autre. Mon problème est que je dois obtenir toutes les valeurs de base correspondantes supprimées de la requête, sauf une. Ensuite, j'exporte cette requête dans une feuille de calcul Excel (je peux très bien faire cette partie) et permets à l'utilisateur de modifier les valeurs de langue.

Lorsque l'utilisateur modifie et / ou insère de nouvelles valeurs de langue, je dois mettre à jour la base de données, sauf maintenant écrire toutes les valeurs correspondantes dans la base de données (comme celles qui ont été supprimées la première fois).

En toute simplicité, le client paie pour les traductions et si je peux générer une feuille qui nécessite moins de traductions (comme des phrases qui réapparaissent souvent), il peut économiser de l’argent, d’où le projet. Je réalise que l’inconvénient est que ce n’est pas une vraie liste chaînée, où toutes les valeurs correspondantes appartiennent à une seule ligne de la table des langues (ce qui aurait été facile). Au lieu de cela, il existe plusieurs valeurs identiques qui doivent être mises à jour comme décrit ci-dessus.

Oui, je suis confus là-dessus, c'est pourquoi cela peut sembler un peu vague. Voici un exemple:

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*

Résultat souhaité (lorsque demandé)

Tableau 1     Item 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)

L'utilisateur apporte ses modifications, y compris l'insertion de données dans des lignes vierges (comme la ligne 6 pour la langue), puis reuploade:

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)

Il existe également une clé de ressource correspondant à chaque " Item Description " vers un seul "Item Desc in other Language". La seule fois où ils se verront, c'est au cours de ce processus de traduction. Dans tous les autres cas, les valeurs peuvent être différentes, de sorte que les clés de ressources ne peuvent pas simplement être modifiées de manière permanente.

Je devrais également ajouter, il ne devrait y avoir aucune modification de la structure des tables ou de la suppression des lignes de la table.

Ok, voici une révision mise à jour de ce que j'aimerais que la requête fasse, mais ne le fait évidemment pas, car j'ai réellement besoin des valeurs de la table jointe:

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
Était-ce utile?

La solution 3

Hé, merci pour cette mise à jour!

En regardant cela et en l'ajoutant à un post précédent, j'ai finalement trouvé ceci:

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

J'ai réalisé que je n'avais pas besoin d'une valeur_ressource spécifique, mais simplement de celle qui y figurait. J'ai aussi réalisé que je n'avais pas du tout besoin de la clé de ressource en dehors de la requête. La mise à jour mettra à jour TOUTES les valeurs de base correspondantes, alors je n’ai pas vraiment besoin de la clé de ressource, ce qui m’a permis d’utiliser GROUP BY.

J'ai pris un moment, désolé pour la piètre explication, mais ça y est! :) Merci pour toute l'aide.

Autres conseils

Hm, toujours pas vraiment clair sur ce qu'est le problème, mais laissez-moi essayer.

Tableaux:

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

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

Vous souhaitez récupérer une valeur de base et toutes les valeurs de traduction correspondantes qui correspondent à cette valeur de base, les exporter vers Excel, puis les recharger via une mise à jour (je pense).

SQL pour SÉLECTIONNER les données:

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;

Cela vous donnera:

1234    Foo
1235    Bar
1236    Baz

Exportez-le pour exceller et récupérez-le avec les mises à jour:

1234    Goo
1235    Car
1236    Spaz

Vous pouvez alors dire:

UPDATE RESOURCE_VALUES
   SET RESOURCE_VALUE = value_from_spreadsheet
 WHERE RESOURCE_KEY = key_from_spreadsheet

Je suis peut-être un peu déçu par ce type, alors laissez-le-moi savoir et, si vous pouvez fournir un peu plus de détails, je pourrais peut-être marquer plus près du but.

Salut!

Si vous devez supprimer toutes les correspondances sauf une, pourquoi ne pas supprimer toutes les correspondances ... correspondances ... nous avons besoin de meilleures conditions ... puis insérez la bonne. Par exemple, si vous devez mettre à jour les correspondances entre les éléments 12 et 13 dans le tableau des paires de bases, procédez comme suit:

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

Je simplifie peut-être à outrance, mais votre description semble vague par endroits.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top