我想添加虛擬(不存在)的行獲得系統中的所有可用翻譯列表SQL添加「不存在」行基於對所有變體的結果並刪除重複
我想要得到的是象下面這樣: (例如1)
id title source_langcode target_langcode | (type) ----------------------------------------------------| ... | 205 Iriure EN en en | ⟵ original 205 Iriure EN en de | ⟵ non translated (virtual) 205 IriUKure en uk | ⟵ translation ... |
什麼我有現在: (例如2)
id title source_langcode target_langcode | ----------------------------------------------------| ... | 205 Iriure EN en en | ⟵ original 205 IriUKure uk DYMMY_LANGCODE | ⟵ translation 205 Iriure EN en uk | ⟵ this is redundant 205 Iriure EN en de | ⟵ non translated (virtual) ...
問題:
translations
表存儲只翻譯&原始實體,但我需要爲非翻譯實體也添加翻譯,這個「虛擬」記錄(他們的字段)應該基於源實體字段。
概述:
有在這個系統
languages
兩個表 - 系統中的所有可用語言的列表(例如3)
id langcode ---------------- 1 en 2 de 3 uk
translations
- 源實體的名單及其基於源實體的翻譯(示例4)
id title langcode default_langcode created changed ... ... --------------------------------------------------------------------------------- ... 205 Iriure EN en 1 xxxxxxxxxx xxxxxxxxxx 205 IriUKure uk 0 xxxxxxxxxx xxxxxxxxxx 206 UK Nunc UK uk 1 xxxxxxxxxx xxxxxxxxxx 207 LucidusDE de 1 xxxxxxxxxx xxxxxxxxxx ...
爲了指示當前行是一個源用來default_langcode
(INT)柱,但在其它情況下default_langcode
=> 0意味着這是一個翻譯
試圖解決方案:溶液的
一個使用交叉連接被在languages
表只有default_langcode = 1
行,但在這種情況下,我從翻譯的來源實體領域。 我用:
SELECT
translations.id AS id,
translations.title,
translations.langcode AS source,
translations.created AS created,
l.langcode,
tr.langs as translations_langs,
IF(FIND_IN_SET(l.langcode, tr.langs) AND translations.langcode <> l.langcode, 1, 0) as is_translation
FROM
translations translations
CROSS JOIN languages l
INNER JOIN (
SELECT
translations.id,
GROUP_CONCAT(translations.langcode separator ',') as langs,
COUNT(translations.langcode) as items
FROM translations translations
GROUP BY translations.id
) AS tr ON translations.id = tr.id
WHERE node_field_data.default_langcode = '1'
ORDER BY node_field_data.id
,我試過用UNION另一種解決方案,但在這種情況下,我有像example 1
與冗餘行的結果。
查詢:
(SELECT
translations.id AS id,
translations.title,
translations.langcode AS source_language,
l.langcode as target_language,
translations.created AS created
FROM
translations translations
CROSS JOIN languages l
WHERE
translations.default_langcode = '1'
)
UNION ALL
(SELECT
translations.id AS id,
translations.title,
translations.langcode AS source_language,
'DYMMY_LANGCODE' as target_language ,
translations.created AS created
FROM
translations translations
WHERE
translations.default_langcode = '0'
)
ORDER BY id
摘要: 我需要的就是讓所有的語言和每個翻譯langcodes之間的差異(其中default_langcode
= 0),並添加有默認值額外行(標題, (其中default_langcode
= 1)
個人而言,我寧願不使用工會,因爲系統的具體事情,但如果這是唯一的方式,那麼它是好的。 理想情況下,我想用連接translations
表。
協議:
行〜實體〜記錄
感謝您的幫助!
謝謝,艾克!但是在標題領域沒有模式,我也想從源實體獲取任何字段。我已經填補了一些問題的描述,以避免這種誤解。 –