2010-12-07 11 views
7

Ben: Grants GORM, tablodan rastgele satırları döndürmek için mi? Benim grails uygulamasında

keywords = Keyword 
    .findAll("from Keyword where locale = '$locale' order by rand() ", [max:20]) 

yukarıdaki kriterlere uyan tablodaki satırların binlercesi var varsayalım. Ancak tablodan döndürülmüş satırlar rastgele değil, ancak satırlar Db'de saklanmasına rağmen, döndükleri 20 satırlık bağlamda rastgele oldukları halde. Uygulamamın çalışması için bu sorguyu, satır kimliği 203, satır kimliği 3789, satır kimliği 9087, satır kimliği 789 ve benzeri olabilir gibi tablodan tamamen rastgele satır döndürmek istiyorum. Bu nasıl mümkün olabilir?

+0

Eğer Datasource.groovy SQL günlüğünü etkinleştirmek ve görebiliyor sorgusu o oluşturuluyor ne? MySQL'e benzer bir sorgu kullanıyorum ve beklendiği gibi çalışıyor gibi görünüyor. – leebutts

+0

Aslında, yürütme sorgusu kullanıyoruz. Cevabımı görün ... – leebutts

cevap

12

aşağıdaki stili kullanın:

Keyword.executeQuery('from Keyword order by rand()', [max: 9]) 

ve tüm tablo (biz MySQL kullanıyoruz) rastgele satır döndürür.

Sorguyu çalıştırmanın neden findAll'den farklı davranacağından emin değilim.

0

Bir .withCriteria kullanmak istiyorsanız o workaraound yapabilirsiniz:

User.withCriteria{ 
eq 'name', 'joseph' 
sqlRestriction " order by rand()" 
} 

O eklemek gerekli olduğunu bazen (yaratılan Kriterler sorguya bağlıdır) söylemek için önemli olan bir "1 = 1" de sqlRestriction, oluşturulan sorguda bir "ve" koşulu eklemesine neden olur. Yani bir sqle istisna kullanımını varsa:

sqlRestriction " 1=1 order by rand()" 
İlgili konular