それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Propelで結果をランダムに並べる。

ランダムな5件がほしいとき。

SQLであれば以下のように書ける。

SELECT * FROM entry ORDER BY rand()   limit 5 #mysql
SELECT * FROM entry ORDER BY random() limit 5 #postgres

不思議。でも賢い

一般的には具体的には次のようにする。

SELECT *, random() as random_num FROM entry ORDER BY random_num;

さて、これをsymfonyで使うにはどうするんだろうか。Propelだと困った。

symfony ではaddDescendingOrderByColumnを使う

symfony のsfActionで次のようにする。

<?php
//ランダムな5件を取得するMYSQL版
$c = new Criteria();
$c->addAscendingOrderByColumn('rand()');
$c->setLimit(5);
$this->random_entry = EntryPeer::doSelect($c);


PythonPHPSQLを直書きした方がいいと最近思う。SQLは完成された言語だな。