2008-10-15 4 views
0

У меня есть запрос, который имеет список базовых значений и список значений языка. Каждое значение имеет ключ, соответствующий другому. Базовые значения хранятся в одной таблице, а значения языка - в другой. Моя проблема в том, что мне нужно получить все соответствующие базовые значения, удаленные из QUERY, за исключением одного. Затем я экспортирую этот запрос в электронную таблицу Excel (я могу сделать эту порцию в порядке) и разрешить пользователю редактировать значения языка.Соответствие значений в двух таблицах запроса (SQL и ColdFusion)

Когда пользователь редактирует и/или вставляет новые языковые значения, мне нужно обновить базу данных, кроме как теперь писать любые сопоставимые значения в базе данных (например, те, которые были удалены в первый раз).

В простоте клиент оплачивает переводы, и если я могу создать лист с меньшим количеством требуемых переводов (например, часто появляющиеся фразы), то они могут сэкономить деньги, следовательно, проект начнется. Я понимаю, что недостатком является то, что это не истинный связанный список, где все соответствующие значения принадлежат одной строке в таблице языков (что было бы легко). Вместо этого существует несколько идентичных значений, которые необходимо обновить, как описано выше.


Да, я смущен, поэтому это может показаться немного расплывчатым. Вот пример:

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 Item Description1 Пункт Description2 Пункт description3 Пункт описание 4 Пункт 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) 

Пользователь вносит свои изменения, включая вставку данных в пустые строки (например, ro ш 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) 

Там также является ключевым ресурсом, который соответствует каждому «Описание товара» для одного «Пункт Desc на другом языке». Единственный раз, когда они когда-либо будут видеть друг друга во время этого процесса перевода, все остальные значения могут быть разными, поэтому ключи ресурсов не могут быть просто изменены на всю точку на одном переводе навсегда.

Я также должен добавить, не должно быть никаких изменений в структуре таблиц или удалении строк таблицы.


Хорошо, вот обновленное исправление того, что я хотел бы запрос, чтобы сделать, но, очевидно, не делать, так как я на самом деле нужен значение присоединяемой таблицы:

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 

ответ

0

Эй, спасибо за это обновление!

Глядя на это, и добавив его в предыдущем посте я, наконец, пришел с этим:

<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, просто какой был там. Я также понял, что мне не нужен ключ ресурса вне запроса. Обновление будет обновлять ВСЕ соответствующие базовые значения независимо, поэтому мне действительно не нужен ключ ресурса, что позволило мне использовать GROUP BY.

Взял время, извините за плохое объяснение, но это все! :) Спасибо за помощь.

0

Если вам нужно удалите все совпадения, кроме одного, почему бы не удалить все совпадающие совпадения ... нам нужны лучшие термины ... и затем вставить правильный. 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); 

I может быть упрощает, но ваше описание кажется расплывчатым в местах.

1

Хм, все еще не совсем понятно, что это за проблема, но позвольте мне уйти.

Таблицы:

 
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 

Я могу быть в стороне от этого парня, так что дайте мне знать, и, если вы можете предоставить немного больше деталей, я могу забить ближе к знаку.

Cheers!