2016-04-22 112 views
2

我有一張桌子Bildergalerie。每條記錄都有一個相應的頁面(PageID)。我如何循環查看錶格,並且每個PageID(分組?)隨機查詢4條記錄並將結果傳遞給模板?如何分組查詢並隨機獲得第n個項目

**ID ClassName PageID** 
1 Bildergalerie **8** 
2 Bildergalerie **12** 
3 Bildergalerie 13 
4 Bildergalerie 13 
5 Bildergalerie 13 
6 Bildergalerie 13 
7 Bildergalerie 13 
8 Bildergalerie 13 
9 Bildergalerie 13 
10 Bildergalerie 13 
11 Bildergalerie 8 
12 Bildergalerie 8 
13 Bildergalerie 12 
14 Bildergalerie 12 
15 Bildergalerie 12 
16 Bildergalerie 12 
17 Bildergalerie 12 
18 Bildergalerie 12 
19 Bildergalerie 12 
20 Bildergalerie 12 
21 Bildergalerie 12 
22 Bildergalerie 12 
23 Bildergalerie 12 
24 Bildergalerie 12 
25 Bildergalerie 12 

希望有人能幫助。 THX :-)

在我使用控制器

public function getBildergalerieninner() { 
    $Testimonials = Bildergalerie::get()->sort('RAND()')->limit(12); 
    return $Testimonials; 
}  

中的以下功能在我用這個循環的模板的時刻

<% loop Bildergalerieninner %> 
    <div class="grids col-xs-12 col-sm-4 col-md-3 mix all $Page.URLSegment"> 
     <div class="grid"> 
      <img src="$Bildergalerie.BildergalerieThumb.URL" width="400" height="273" alt="$Alttext" class="img-responsive" /> 
      <div class="figcaption"> 
      <h4>$Alttext</h4> 
      <a href="$Bildergalerie.BildergalerieBig.URL" data-rel="prettyPhoto[portfolio]"> 
       <i class="fa fa-search"></i> 
      </a> 
      <% if VerlinkungID %> 
      <a href="$Verlinkung.Link"> 
       <i class="fa fa-link"></i> 
      </a> 
      <% end_if %> 
     </div> 
    </div> 
</div> 
<% end_loop %> 

什麼我嘗試做的是讓隨機的每頁PageID的Bildergalerie項目?

我已經看過其他問題,但沒有找到一個答案或方法進入正確的方向?!

+0

你能證明你的預期輸出嗎? –

+0

你有什麼試過,爲什麼失敗?在這個網站上已經有很多關於sql和分組的問題和答案(!)了。你看到了哪些?請不要把你的工作放在我們身上。提出好的問題意味着你的一些研究。 – cfi

回答

1

您可以用Silverstripe一個GroupedList便於管理:

public function GroupedEntries() { 
     return GroupedList::create(
      Bildergalerie::get()->sort('RAND()') 
     ); 
} 

<% loop $GroupedEntries.GroupedBy('PageID') %> 
<% loop $Children.Limit(4) %> 
<div class="grids col-xs-12 col-sm-4 col-md-3 mix all $Page.URLSegment"> 
    <div class="grid"> 
     <img src="$Bildergalerie.BildergalerieThumb.URL" width="400" height="273" alt="$Alttext" class="img-responsive" /> 
     <div class="figcaption"> 
     <h4>$Alttext</h4> 
     <a href="$Bildergalerie.BildergalerieBig.URL" data-rel="prettyPhoto[portfolio]"> 
      <i class="fa fa-search"></i> 
     </a> 
     <% if VerlinkungID %><a href="$Verlinkung.Link"> 
      <i class="fa fa-link"></i> 
     </a><% end_if %></div> 
    </div> 
</div> 
<% end_loop %> 
<% end_loop %> 
0

有點棘手,但也不是不可能用單一的SQL查詢來做到這一點:

SELECT 
    id, classname, pageid 
FROM 
(
    SELECT 
     *, @row:=IF([email protected], @row, 0) + 1 AS rn, @pageid:=pageid 
    FROM 
     (SELECT *, RAND() AS trand FROM bildergalerie) t1, 
     (SELECT @row:=0, @pageid:='') sqlvars 
    ORDER BY 
     pageid, trand 
) t2 
WHERE rn <= 4 

這給你隨機四個記錄每個pageid組組合在一個結果。

+0

感謝您花費您的時間和快速回復。我只是找到了一個簡單的方法:-) – Carsten

+0

太棒了!標記任何答案以關閉該主題。 – mitkosoft

+0

看來,我不得不等待兩天來標記我自己的答案:-) – Carsten