2010-09-15 13 views
5

Grails 1.2.4 kullanıyorum. Bir projeksiyonda "countDistinct" (azalan) ve groupProperty ile nasıl sıralayabilirim. İşte Grails Kriterlerinde groupProperty ve countDistinct öğelerini kullanma

benim alanlar: MySQL açısından

class Transaction { 

    static belongsTo = [ customer : Customer, product : Product ] 

    Date transactionDate = new Date() 

    static constraints = { 
     transactionDate(blank:false)  
    } 

} 

class Product { 

    String productCode 

    static constraints = { 
     productCode(blank:false)  
    } 
} 

, bu benim istediğim şey:

genel bir terim olarak
select 
    product_id, 
    count(product_id) 
from 
    transaction 
group by 
    product_id 
order by 
    count(product_id) desc 

, ben ya da sadece ürün (ürünlerin listesini almak istiyorum

: bir ürün (azalan)

vardı işlemlerin sayısına göre sıralanır id) Bu benim tahminim

Ancak beklenen sonucumu vermiyor. Bu konuda herhangi bir öneri çok takdir edilecektir. Teşekkürler!

cevap

7

bu deneyin: farklı

select 
    product_id, 
    count(**distinct** product_id) 
from 
    transaction 
group by 
    product_id 
order by 
    count(product_id) desc 

Not:

def c = Transaction.createCriteria() 
def transactions = c.list { 
    projections { 
     groupProperty("product") 
     countDistinct("id") 
    } 
    maxResults(pageBlock) 
    firstResult(pageIndex) 
} 

Kriteriniz sorgu aslında eşdeğerdir. Ürün başına farklı işlemlerin sayısını saymak istersiniz, böylece işlem kimliğini (veya herhangi bir işlem özelliğini) saymak daha mantıklı olur. Ürün kimliği, yalnızca ayrı bir madde olmadan çalışır.

Bu tür bir sorunu gidermek için süper kullanışlı hazırda SQL günlüğünü açabilirsiniz. Kriterlerinizin SQL'e nasıl dönüştürüldüğünü tam olarak gösterecektir.

org.apache.log4j.Logger.getLogger("org.hibernate").setLevel(org.apache.log4j.Level.DEBUG) 

veya Config.groovy bu atmak: Çalışma zamanında

environments { 
    development { 
     log4j = { 
      debug 'org.hibernate' 
      } 
    } 
} 

DÜZENLEME: projeksiyonu olarak countDistinct("id", "transactionCount") kullanabilir ve order("transactionCount") sayımına göre sıralanır.

+0

Teşekkürler! işe yaradı. ancak, createCriteria'da 'count (product_id) desc' ile nasıl sıralama yapılacağından bahsetmediniz – firnnauriel

İlgili konular