2016-04-22 11 views
2

私はテーブルを持っています。各レコードには、対応するページ(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 

誰でも手伝っていただけたらと思います。私はこのループを使用したテンプレートでは、コントローラ

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

内で次の関数を使用する瞬間

:-) THXは

<% 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あたりのアイテム数は?

私は既に他の質問をしていましたが、答えが見つからないか、正しい方向に向かう方法が見つかりませんでしたか?

+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 

これはあなたに1つの結果セットにまとめpageidグループごとにランダムに4つのレコードを提供します。

+0

あなたの時間とあなたの素早い返信に感謝します。私はちょうど簡単な方法を見つけた:-) – Carsten

+0

素晴らしい!トピックを閉じるには、回答をマークしてください。 – mitkosoft

+0

それは私自身の答えに印を付けるのに2日間待たなければならないと思われます:-) – Carsten

関連する問題