2013-10-04 30 views
2

希望得到一些指導。(電梯)在CSS選擇器轉換過程中對項目進行分組?

考慮這個片斷:

val q = (for { 
    (d, o) <- dx innerJoin ox on (_.user === _.id) 
    } yield(d,o)) 

    "div" #> q.map { case (x, y) => 
    { 
     ".dF1 *" #> x.name & 
     ".dF2 *" #> y.id 
    } 
} 

在此查詢,我有兩個表,其中表「黃牛」是的人的名單,而「DX」是與這些人相關項目的列表。 正如它所寫,它的效果很好,但我最終爲每個人擁有的每個物品創建一行。因此,假設三個用戶,前兩個有兩個項目,最後一個有1個,我得到五行:

<div class="dF1">[user1]</div><div class="dF2">[item1]</div> 
<div class="dF1">[user1]</div><div class="dF2">[item2]</div> 
<div class="dF1">[user2]</div><div class="dF2">[item1]</div> 
<div class="dF1">[user2[</div><div class="dF2">[item2]</div> 
<div class="dF1">[user3]</div><div class="dF2">[item3]</div> 

我想要做的是爲每個用戶創建一個單獨的行,裏面的dF2時的字段創建多個div,每個項目一個。佈局然後是:

<div class="dF1">[user1]</div><div class="dF2">[item1] [item2]</div> 
<div class="dF1">[user2]</div><div class="dF2">[item1] [item2]</div> 
<div class="dF1">[user3]</div><div class="dF2">[item1]</div> 

我該怎麼做?我需要使用中介集合嗎?

+0

你不明確地說,但從以前的問題,它看起來像你使用Slick。任何在執行它之前沒有在查詢中使用groupBy的理由? –

+0

我確實使用光滑 - 我將重新審視group-by方法,之前我放棄了一點,因爲它創建了一個奇怪的/不是最佳的查詢查詢,重做我的模式後可能無法修復,並且因爲我在處理一個組的結果。 –

回答

4

這裏有兩種選擇,您可以使用數據庫返回按字段分組的集合,也可以使用Scala對集合進行分組。如果您使用數據庫,則僅限於按字段進行分組,例如x.name,但執行效率可能更高。如果你使用Scala進行分組,你可以按照整個對象x進行分組,但是你最終會做更多的處理和對象創建。你需要決定哪一個最適合你。

現在,說 - 讓我們假設我們正在使用Scala。你會做這樣的事情:

"div" #> q.groupBy(_._1).map { case (x, y) => 
    { 
     ".dF1 *" #> x.name & 
     ".dF2 *" #> y.map{ case (x2, y2) => y2.id}.mkString(" ") 
    } 
} 

而是直接用含有從查詢DOList工作中,groupBy將創建類型的列表:Map[D, List[(D, O)]]。在上面的示例中,我只是將o的字段組合爲一個字符串以輸出,看起來像您請求的示例。

而不是一個單一的字符串,你也可以讓你的第二張地圖返回CssSel做進一步的轉換。下面這個例子將尋找<div class="dF2SubDiv"></div>嵌套在具有類dF2div

"div" #> q.groupBy(_._1).map { case (x, y) => 
    { 
     ".dF1 *" #> x.name & 
     ".dF2" #> y.map{ case (x2, y2) => 
      ".dF2SubDiv *" #> y2.id 
     } 
    } 
} 

如果你寧願用油滑做GROUPBY,你會發現它herehere更多信息。

+0

謝謝。試着給groupBy更多嘗試一個新優化的模式,看看它是如何工作的。我確實同意groupBy方法是理想的。 –

+0

只有一個觀察,之所以我認爲之前沒有爲我工作是因爲我分組的SQL方式,例如groupBy(_._ 1.fieldname)而不是groupBy(_._ 1)。 –

+0

有幾個問題:我必須再次向我的yield(d,o)添加一個.list,否則我會得到一個「找不到參數計算機/ CanBind的隱式值」,並且mkString將會是未定義的。一旦我添加'.list'就沒有問題。另外,我可以使用第一種方法插入DIV,或者在設計時不知道DIV數量的情況下使用第二種方法? –

相關問題