Empfehlungen: Erweiterte Suche

SQL in Cake Find Syntax übersetzen

Daten auslesen, verarbeiten und den Views übergeben

SQL in Cake Find Syntax übersetzen

Beitragvon Dogo » Fr 18. Sep 2009, 15:53

Hallo Kollegen,

ich würde gerne ein Zufallsbild ausgeben. Und zwar nach der Methode, wie sie hier beschrieben ist:
http://jan.kneschke.de/projects/mysql/order-by-rand

Ich habe folgende Query als für mich passend bzw. ausreichend empfunden, da mit das ungleiche Chancen-Verteilen aufgrund der Lücken nicht wichtig genug ist:
Code: Alles auswählen
SELECT name
  FROM pictures AS r1 JOIN
       (SELECT (RAND() *
                     (SELECT MAX(id)
                        FROM pictures)) AS id)
        AS r2
 WHERE r1.id >= r2.id
 ORDER BY r1.id ASC
 LIMIT 1;


Ich habe echt Probleme damit, diese Abfrage in eine ordentliche Cake-Find-Syntax zu übersetzen.
Kann mir da wer behilflich sein? Order ist nicht so schwierig, aber das Ding mit dem Join lässt mir den Kopf rauchen...

Bisher habe ich:
Code: Alles auswählen
$random = $this->Picture->find('first', array('conditions' => array('r1.id >= r2.id'),'fields' => array('Picture.id', 'Picture.name'), 'recursive' => 0));
 


Danke und Gruß,

Dogo
Benutzeravatar
Dogo
 
Beiträge: 63
Registriert: Do 6. Aug 2009, 00:59
Wohnort: Wuppertal

Re: SQL in Cake Find Syntax übersetzen

Beitragvon Mathias » Fr 18. Sep 2009, 16:54

ich hab das einfach so gemacht:
Code: Alles auswählen
$this->set('photos', $this->Photo->find('all', array('order'=> 'rand()', 'limit' => 5, 'recursive' => 0)));
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: SQL in Cake Find Syntax übersetzen

Beitragvon Dogo » Fr 18. Sep 2009, 17:49

Order by Rand() soll allerdings ein Performance-Killer sein - daher auch mein Hinweis auf die Version für Performance-Angewiesene.
Ich hab's allerdings noch nicht gemessen.
Benutzeravatar
Dogo
 
Beiträge: 63
Registriert: Do 6. Aug 2009, 00:59
Wohnort: Wuppertal


Zurück zu Controller

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast