Як далучыцца значэння з хэш-карт?

я прынёс некалькі табліц SQL праз JDBC і мне трэба зрабіць яшчэ адно пераўтварэнні, перш чым я стварыць новую табліцу і ўставіць значэнне.

Я атрымаў гэтыя два Хэш-карты:

раздзелы:

(
{:chapter_uuid "b7984dde-50a1-4147-bfee-95bbd068e031", :l1_chapter_text 
120876M, :l2_chapter_text nil, :l3_chapter_text nil, :l4_chapter_text nil} 

{:chapter_uuid "23df4f27-534b-4cdb-81ed-dbdc8b9b140c", :l1_chapter_text 
120880M, :l2_chapter_text 120876M, :l3_chapter_text nil, :l4_chapter_text 
121621M}
)

пераклад:

(
{:translation_id 3258779M, :translation_text 120876M, :translation_language "cs", 
:translation_name "Vnější fasáda"} 

{:translation_id 3258780M, :translation_text 120876M, :translation_language "en", 
:translation_name "Exterior Signage"} 

{:translation_id 3258782M, :translation_text 120880M, :translation_language "cs", 
:translation_name "Čistá výloha"} 

{:translation_id 3258783M, :translation_text 121621M, :translation_language "cs", 
:translation_name "Vnější signalizace"} 

{:translation_id 3258784M, :translation_text 121621M, :translation_language "en", 
:translation_name "Pre-signalization"}
)

<�Моцны> Гэта тое, што мне трэба атрымаць:

Where Chapters.lx_chapter_text = Translation.translation_text -> swap Chapters.lx_chapter_text with translation_name and insert :language value -> Make sure that every language has its own hash-map!

(
{:chapter_uuid "b7984dde-50a1-4147-bfee-95bbd068e031", :l1_chapter_text 
"Vnější fasáda", :l2_chapter_text nil, :l3_chapter_text nil, :l4_chapter_text nil 
:language "cs"}

{:chapter_uuid "b7984dde-50a1-4147-bfee-95bbd068e031", :l1_chapter_text 
"Exterior Signage", :l2_chapter_text nil, :l3_chapter_text nil, :l4_chapter_text nil 
:language "en"}

{:chapter_uuid "23df4f27-534b-4cdb-81ed-dbdc8b9b140c", :l1_chapter_text
"Čistá výloha", :l2_chapter_text "Vnější fasáda", :l3_chapter_text nil, :l4_chapter_text
"Vnější signalizace" :language "cs"}

{:chapter_uuid "23df4f27-534b-4cdb-81ed-dbdc8b9b140c", :l1_chapter_text
120880M, :l2_chapter_text "Exterior Signage", :l3_chapter_text nil, :l4_chapter_text
"Pre-signalization" :language "en"}
)

<�Моцны> Гэта як далёка i've атрымаў:

, але як вы можаце бачыць, што гэта не так (дрэнна укладзеная)

Ці можаце вы сказаць мне, як зрабіць гэта правільна? Дзякуй!

(defn test_table []
    (for [language (distinct(map #(:translation_language %) translation))]
        (for [chapter chapters]
            (for [text translation]
            (cond
            (and (= (:l1_chapter_text chapter) (:translation_text text)) (= (:translation_language text) language))
              (assoc chapter :l1_chapter_text (:translation_name text) :language (:translation_language text))
            (and (= (:l2_chapter_text chapter) (:translation_text text)) (= (:translation_language text) language))
              (assoc chapter :l2_chapter_text (:translation_name text) :language (:translation_language text))
            (and (= (:l3_chapter_text chapter) (:translation_text text)) (= (:translation_language text) language))
              (assoc chapter :l3_chapter_text (:translation_name text) :language (:translation_language text))
            (and (= (:l4_chapter_text chapter) (:translation_text text)) (= (:translation_language text) language))
              (assoc chapter :l4_chapter_text (:translation_name text) :language (:translation_language text))))))

(test-table)

->
((({:chapter_uuid "b7984dde-50a1-4147-bfee-95bbd068e031", :l1_chapter_text "Vnější fasáda", 
:l2_chapter_text nil, :l3_chapter_text nil, :l4_chapter_text nil, :language "cs"} 
nil nil nil nil) 
({:chapter_uuid "23df4f27-534b-4cdb-81ed-dbdc8b9b140c", :l1_chapter_text 120880M, 
:l2_chapter_text "Vnější fasáda", :l3_chapter_text nil, :l4_chapter_text 121621M, :language "cs"} 
nil 
{:chapter_uuid "23df4f27-534b-4cdb-81ed-dbdc8b9b140c", :l1_chapter_text "Čistá výloha", 
:l2_chapter_text 120876M, :l3_chapter_text nil, :l4_chapter_text 121621M, :language "cs"} 
{:chapter_uuid "23df4f27-534b-4cdb-81ed-dbdc8b9b140c", :l1_chapter_text 120880M, 
:l2_chapter_text 120876M, :l3_chapter_text nil, :l4_chapter_text "Vnější signalizace", :language "cs"} 
nil)) 
((nil 
{:chapter_uuid "b7984dde-50a1-4147-bfee-95bbd068e031", :l1_chapter_text "Exterior Signage", 
:l2_chapter_text nil, :l3_chapter_text nil, :l4_chapter_text nil, :language "en"} 
nil nil nil) 
(nil 
{:chapter_uuid "23df4f27-534b-4cdb-81ed-dbdc8b9b140c", :l1_chapter_text 120880M, 
:l2_chapter_text "Exterior Signage", :l3_chapter_text nil, :l4_chapter_text 121621M, :language "en"} 
nil nil 
{:chapter_uuid "23df4f27-534b-4cdb-81ed-dbdc8b9b140c", :l1_chapter_text 120880M, 
:l2_chapter_text 120876M, :l3_chapter_text nil, :l4_chapter_text "Pre-signalization", :language "en"})))
0
Як вы хочаце далучыцца да каштоўнасцяў? у адпаведнасці з чым? калі ў вас ёсць {: 1} і {: 2}, што а будзе?
дададзена аўтар Ertuğrul Çetin, крыніца
Чаму б не далучыцца да гэтага ў дб/SQL адразу?
дададзена аўтар cfrick, крыніца
Я прашу прабачэння, я не разумею ваша пытанне. Існуе: л * _chapter_text, якія могуць быць прызначаныя: translation_text для кожнай мовы калісьці ...
дададзена аўтар Akiz, крыніца
Я не ведаю, як пісаць у SQL :-). Кіраўнік хэш-карта ўжо вынік у SQL вось пашырыць іерархію (зыходная табліца мае толькі UUID, эпізоду Бацька, тэкставыя палі) і я не ведаю, як аб'яднаць гэты SQL з адным вы propossing ...
дададзена аўтар Akiz, крыніца

5 адказы

Па-першае, у вас ёсць спіс усіх моў, якія выкарыстоўваюцца ў перакладах? Калі няма, то давайце вывесці яго з </перакладаў кода> калекцыі:

(def langs (distinct (map :translation_language translations))) ;; => ("cs" "en")

Па-другое, як вы збіраецеся выкарыстоўваць пераклады збору ў выглядзе табліцы перакадыроўкі, то мае сэнс зрабіць карту гэтага. Самы просты (хоць, магчыма, не самы эфектыўны) спосаб зрабіць гэта складаецца ў выкарыстанні групы па функцыі:

(def translations-map
  (group-by (juxt :translation_text :translation_language) translations))

Looks like what you need to do is to convert each :l

3
дададзена

Па-першае, у вас ёсць спіс усіх моў, якія выкарыстоўваюцца ў перакладах? Калі няма, то давайце вывесці яго з </перакладаў кода> калекцыі:

(def langs (distinct (map :translation_language translations))) ;; => ("cs" "en")

Па-другое, як вы збіраецеся выкарыстоўваць пераклады збору ў выглядзе табліцы перакадыроўкі, то мае сэнс зрабіць карту гэтага. Самы просты (хоць, магчыма, не самы эфектыўны) спосаб зрабіць гэта складаецца ў выкарыстанні групы па функцыі:

(def translations-map
  (group-by (juxt :translation_text :translation_language) translations))

Looks like what you need to do is to convert each :l

3
дададзена
(let [a ...
      b ...]
  (as-> [:l1_chapter_text :l2_chapter_text :l3_chapter_text :l4_chapter_text] 
        relations
        (interleave relations (repeat :translation_text))
        (apply hash-map relations)
        (mapcat #(clojure.set/join a b (into {} [%])) relations)
        (group-by (fn [a] (apply str ((juxt :chapter_uuid :l1_chapter_text :l2_chapter_text :l3_chapter_text :l4_chapter_text :translation_language) a))) relations)
        (vals relations)))
0
дададзена
(let [a ...
      b ...]
  (as-> [:l1_chapter_text :l2_chapter_text :l3_chapter_text :l4_chapter_text] 
        relations
        (interleave relations (repeat :translation_text))
        (apply hash-map relations)
        (mapcat #(clojure.set/join a b (into {} [%])) relations)
        (group-by (fn [a] (apply str ((juxt :chapter_uuid :l1_chapter_text :l2_chapter_text :l3_chapter_text :l4_chapter_text :translation_language) a))) relations)
        (vals relations)))
0
дададзена
(let [a ...
      b ...]
  (as-> [:l1_chapter_text :l2_chapter_text :l3_chapter_text :l4_chapter_text] 
        relations
        (interleave relations (repeat :translation_text))
        (apply hash-map relations)
        (mapcat #(clojure.set/join a b (into {} [%])) relations)
        (group-by (fn [a] (apply str ((juxt :chapter_uuid :l1_chapter_text :l2_chapter_text :l3_chapter_text :l4_chapter_text :translation_language) a))) relations)
        (vals relations)))
0
дададзена