如何对查询进行分组并随机获得每组第 n 个项目
How to group a query and get n th items per group randomly
我有一个 table 画廊。每条记录都有一个相应的页面 (PageID)。我如何遍历 table 并根据每个 PageID(分组?)随机查询 4 条记录并将结果传递给模板?
**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;
}
在模板中我使用了这个循环
<% 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 项目?
我已经研究过其他问题,但没有找到答案或进入正确方向的方法?!
有点棘手,但通过单个 SQL 查询并非不可能:
SELECT
id, classname, pageid
FROM
(
SELECT
*, @row:=IF(pageid=@pageid, @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
组随机提供四个记录。
您可以使用带有 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 %>
我有一个 table 画廊。每条记录都有一个相应的页面 (PageID)。我如何遍历 table 并根据每个 PageID(分组?)随机查询 4 条记录并将结果传递给模板?
**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;
}
在模板中我使用了这个循环
<% 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 项目?
我已经研究过其他问题,但没有找到答案或进入正确方向的方法?!
有点棘手,但通过单个 SQL 查询并非不可能:
SELECT
id, classname, pageid
FROM
(
SELECT
*, @row:=IF(pageid=@pageid, @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
组随机提供四个记录。
您可以使用带有 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 %>