مطابقة القيم في جدولين الاستعلام (SQL وكولد فيوجن)
-
03-07-2019 - |
سؤال
وعندي استفسار يحتوي على قائمة من القيم الأساسية وقائمة من القيم اللغة. كل قيمة لديه مفتاح يطابق إلى أخرى. يتم تخزين القيم الأساسية في جدول واحد والقيم اللغة في بلد آخر. مشكلتي هي أنني بحاجة للحصول على كل القيم قاعدة مطابقة إزالتها من الاستعلام باستثناء واحد. ثم، وتصدير هذا الاستعلام إلى جداول البيانات إكسل (أستطيع أن أفعل هذا الجزء غرامة) وتسمح للمستخدم لتحرير القيم لغة.
عند عمليات التحرير المستخدم و / أو إدراج القيم لغة جديدة، ولست بحاجة لتحديث قاعدة البيانات باستثناء الكتابة الآن أكثر من أي قيم متطابقة في قاعدة البيانات (مثل تلك التي تمت إزالتها مرة الأولى).
في البساطة، يدفع العميل للترجمة وإذا كنت يمكن أن تولد الورقة التي لديها عدد أقل من الترجمات الضرورية (مثل العبارات التي تعود الى الظهور في كثير من الأحيان) ثم يمكنهم توفير المال، وبالتالي المشروع لتبدأ. وأنا أدرك الجانب السلبي هو أنه لا قائمة مرتبطة حقيقية، حيث كل القيم مطابقة جميع تنتمي إلى صف واحد في جدول اللغات (الذي كان من السهل). بدلا من ذلك، هناك العديد من القيم التي هي متطابقة التي تحتاج إلى تحديث كما هو موضح أعلاه.
نعم، أنا في حيرة عليه، والذي هو السبب في أنه قد يبدو غامضا بعض الشيء. وفيما يلي عينة:
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*
والنتيجة المرجوة (عند الاستعلام)
والجدول 1 البند DESCRIPTION1 البند DESCRIPTION2 البند DESCRIPTION3 البند Description4 البند Description5 البند 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)
ويجعل المستخدم تعديلاتها، بما في ذلك إدخال البيانات في الصفوف الفارغة (مثل الصف 6 للغة) ثم 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)
وهناك أيضا مفتاح مورد يطابق كل "السلعة" إلى "البند تفاصيل في اللغة الأخرى" واحدة. والمرة الوحيدة التي تسير في أي وقت أن نرى بعضنا البعض هو خلال هذه العملية الترجمة وجميع الأوقات الأخرى القيم قد تكون مختلفة، وبالتالي فإن مفاتيح مورد لا يمكن ببساطة أن تتغير إلى كل نقطة في ترجمة واحدة بشكل دائم.
وأود أن أضيف أيضا، ينبغي أن يكون هناك أي تغيير في بنية الجداول أو الصفوف إزالة من الجدول.
وطيب، وهنا لrevisal محدثة ما أود الاستعلام القيام به، ولكن من الواضح أنها لا تفعل منذ أن كنت فعلا بحاجة إلى قيم الجدول انضم:
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
المحلول 3
شكرا يا لهذا التحديث!
وبالنظر إلى أن وإضافته إلى الوظيفة السابقة جئت أخيرا مع هذا:
<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>
وأدركت أنني لم أكن بحاجة إلى resource_value محددة، فقط أي أن كان في هناك. أدركت أيضا لم أكن بحاجة إلى مفتاح الموارد على الإطلاق خارج الاستعلام. التحديث سوف يكون تحديث ALL قيم قاعدة مطابقة بغض النظر، لذلك لم أكن حقا بحاجة الى مفتاح الموارد بعد كل شيء، والذي سمح لي أن استخدام GROUP BY.
واستغرق بعض الوقت، آسف للشرح الفقراء، ولكن هذا هو! :) شكرا على كل المساعدة.
نصائح أخرى
وإدارة الموارد البشرية، لا تزال غير واضحة حقيقية على ما القضية حقا هو، ولكن اسمحوا لي أن إعطائها الذهاب.
والجداول:
BASE_VALUES ------------------ BASE_VALUE_RK BASE_VALUE_NAME RESOURCE_VALUES (these are the translations, I'm guessing) ----------------------- RESOURCE_KEY RESOURCE_LANGUAGE_ID RESOURCE_VALUE
وترغب في استرداد قيمة قاعدة واحدة، وجميع القيم ترجمة المقابلة التي تطابق القيمة الأساسية، تصديرها إلى التفوق، ومن ثم إعادة تحميل بازالتها عن طريق التحديث (على ما أظن).
وSQL لتحديد من البيانات:
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;
وهذا سأعطيك:
1234 Foo 1235 Bar 1236 Baz
والتصدير التي على التفوق، والحصول على إعادته مع التحديثات:
1234 Goo 1235 Car 1236 Spaz
ويمكنك بعد ذلك يقول:
UPDATE RESOURCE_VALUES SET RESOURCE_VALUE = value_from_spreadsheet WHERE RESOURCE_KEY = key_from_spreadsheet
وقد أكون بعيدا قاعدة على هذا الرجل، لذلك اسمحوا لي أن أعرف، وإذا كنت يمكن أن توفر أكثر من ذلك بقليل من التفصيل، قد أكون قادرا على تسجيل أقرب إلى علامة.
وهتاف!
إذا كنت تحتاج إلى إزالة جميع المباريات باستثناء واحد، لماذا لا حذف جميع مطابقة ... مباريات ... نحن بحاجة الى شروط أفضل ... وبعد ذلك تضاف واحدة الصحيح. EG، إذا كنت بحاجة إلى تحديث المباريات بين البندين 12 و 13 في الجدول زوج قاعدة، لا شيء من هذا القبيل
delete from matchtable where (id1 = 12 and id2 = 13) or (id1 = 13 and id2 = 13);
insert into matchtable (id1, id2) values (12, 13);
وأنا يمكن تبسيط، ولكن وصفك يبدو غامضا في بعض الأماكن.