2012-09-06 54 views
0

在我的Grails應用程式中有一個查詢:常規SQL行()方法

def query = """select 
         u.id, u.birth_date, u.gender, uht.data 
        from 
         user_hra_test as uht 
         left join user as u on u.id = uht.user_id 
         left join client as c on c.id = u.client_id 
        where 
         c.id in (${clients*.id.join(',')}) and 
         uht.`date` between "${start.format("yyyy-MM-dd")}" and "${end.format("yyyy-MM-dd")}" 
""" 

當IM手動執行它在我的分貝我得到3行。但是當我這樣做時:

def queryResult = db.rows(query) 

queryResult的大小是1.哪裏出了問題?

UPDADE。我手動刪除形式分貝行至極被發現,現在方法返回不算什麼,但在phpMyAdmin exequting SQL返回2行

回答

0

你可以試試這個:

def dataSource 

    def nameMethod() { 

     def sql = Sql.newInstance(dataSource) 

     def query = def query = """select 
        u.id, u.birth_date, u.gender, uht.data 
       from 
        user_hra_test as uht 
        left join user as u on u.id = uht.user_id 
        left join client as c on c.id = u.client_id 
       where 
        c.id in (${clients*.id.join(',')}) and 
        uht.`date` between "${start.format("yyyy-MM-dd")}" and "${end.format("yyyy-MM-dd")}" 
       """ 

     sql.eachRow(query) { 
      println it //Do whatever you need with each row 
     } 

    } 
+0

沒有工作,請參閱更新 –

0

OK,我不知道爲什麼,但它工作時查詢看起來是這樣的:

select 
         u.id, u.birth_date, u.gender, uht.data 
        from 
         user_hra_test as uht 
         left join user as u on u.id = uht.user_id 
         left join client as c on c.id = u.client_id 
        where 
         c.id in ("""+clients*.id.join(',')+""") and 
         uht.`date` between "${start.format("yyyy-MM-dd")}" and "${end.format("yyyy-MM-dd")}" 
0

這最有可能與Sql/GString互動做。如果您在致電db.rows(query)之前執行def query = '''...'''.toString()def query = '''...''' as String,它很可能會解決您的問題。詳情請見this鏈接,this也有類似問題的鏈接。