2016-04-22 4 views
2

Ich habe einen Tisch Bildergalerie. Jeder Datensatz hat eine entsprechende Seite (PageID). Wie kann ich die Tabelle durchlaufen und 4 Datensätze nach jeder PageID (Gruppierung?) Zufällig abfragen und das Ergebnis an die Vorlage übergeben?Wie gruppiere ich eine Abfrage und bekomme n th Elemente pro Gruppe nach dem Zufallsprinzip

**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 

Hoffe, dass jeder helfen kann. THX :-)

Im Moment ich die folgende Funktion in der Steuerung

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

In der Vorlage ich diese Schleife verwenden

<% 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 %> 

Was ich versuche zu tun ist, zufällig zu erhalten für Bildergalerie-Artikel pro PageID?

Ich habe mir schon andere Fragen angeschaut, aber keine Antwort oder einen Weg gefunden, in die richtige Richtung zu kommen ?!

+0

können Sie hier Ihre erwartete Ausgabe zeigen? –

+0

Was hast du probiert und warum ist es schief gegangen? Es gibt viele Fragen und Antworten (!) Auf SQL und Gruppierung auf dieser Seite bereits. Welche hast du angeschaut? Bitte schütte deine Arbeit nicht einfach an uns ab. Wenn Sie gute Fragen stellen, müssen Sie etwas auf Ihrer Seite nachforschen. – cfi

Antwort

1

Sie können es einfach verwalten mit einem GroupedList mit Silvers:

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

ein bisschen schwierig, aber nicht unmöglich, es mit einzelnen SQL-Abfrage zu tun:

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 

Diese yourandom vier Datensätze pro pageid Gruppe in einem resultset kombiniert wird, gibt.

+0

Vielen Dank für Ihre Zeit und Ihre schnelle Antwort. Ich habe gerade einen einfachen Weg gefunden :-) – Carsten

+0

Großartig! Markieren Sie eine beliebige Antwort, um das Thema zu schließen. – mitkosoft

+0

es scheint, dass ich zwei Tage warten muss, um meine eigene Antwort zu markieren :-) – Carsten