Original Question:
Şu anda Zend_Db_*
ile Zend Framework kullanıyorum, ve ben bir tablodan rasgele üç satır seçiyorum:
$category->getTable()->select()->order(new Zend_Db_Expr('RAND()'))->limit('3')
$category
a Zend_Db_Table_Row
olduğu. Ben rasgele üç satır kapmak istiyorum, ama name
adlı sütunun tarafından sipariş bu üç satır olurdu.
Hiçbir etki aşağıdakilere ->order()
vardı değiştirme:
->order(array(new Zend_Db_Expr('RAND()'), 'name ASC'))
Kayıtlar hala gösteriyor gibi un-sipariş ve yine rastgele.
Zend Framework çözümleri takdir, ama benim proje sığdırmak için başka çözümler uyarlayabilirsiniz.
Bu bir sorun haline için ben RAND () kullanarak ölçekleme sorunların farkındayım, veritabanı yeterince büyük olsun asla, öyle bir gün bunu sürdürmek konusunda endişelenmenize gerek olmayacaktır, robotlar olacak, ben olacak uzun ölmüş! :-P
Answer
Bu sonuçta Zend_Db_Select kullanılarak tamamlanmıştır nasıl merak edenler için, bu (Ben bağımlı satır kümesi bulmak için $category->findDefault_Model_projects()
kullanan Zend_Db_Select içinde bir sub-select kullanmak için aşağı geldi ne, ama bana izin vermiyor ZF-6461 sorunu giderir kadar subselect olarak () seçeneğini kullanın, ben) ne ile şaşırıp:
$projects = new Default_Model_Projects();
$subselect = $projects->select()->order(new Zend_Db_Expr('RAND()'))->limit('3')->where('cid = ?', $category->id, Zend_Db::INT_TYPE);
$db = $projects->getAdapter();
$select = $db->select()->from(array("c" => new Zend_Db_Expr("({$subselect})")))->order('name');
$stmt = $select->query();
$projects = $stmt->fetchAll();
Oluşturulan SQL olduğunu:
SELECT `c`.* FROM (SELECT `projects`.* FROM `projects` WHERE (cid = 1) ORDER BY RAND() LIMIT 3) AS `c` ORDER BY `name` ASC
Oradan $ projeler üzerinde çok başka bir veritabanı sorgularını gibi, bunu yapmaz tek şey onun olumsuz yanları var olabilecek bir tablo belirli satır / satır sınıfında, sopa olduğunu iterated standart satır kümesi içerir.