метод groovy SQL rows().

В моето приложение grails имам следната заявка:

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")}"
"""

Когато го изпълнявам ръчно в моята база данни, получавам 3 реда. Но когато правя това:

def queryResult = db.rows(query)

размерът на queryResult е 1. Къде е проблемът?

АКТУАЛИЗАЦИЯ. Ръчно изтрих от db реда, който беше намерен, и сега методът не връща нищо, но изпълнението на sql в phpmyadmin връща 2 реда


person Vadym Kovalenko    schedule 06.09.2012    source източник


Отговори (3)


можете да опитате това:

   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
       }

    }
person Roberto Perez Alcolea    schedule 06.09.2012

Добре, не знам защо, но работи, когато заявката изглежда така:

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")}"
person Vadym Kovalenko    schedule 06.09.2012

Това най-вероятно е свързано с Sql / GString взаимодействие. Ако изпълните def query = '''...'''.toString() или def query = '''...''' as String преди извикването на db.rows(query), това най-вероятно ще реши проблема ви. Вижте тази връзка за подробности и тази връзка за подобен въпрос.

person btiernay    schedule 08.09.2012