2010-11-23 11 views
5

¿Cómo selecciono todos los registros agrupados por una columna ordenada por created_at desc.Rails 3: group =>: campo ordenado por created_at desc

Es posible que desee recuperar todos los últimos comentarios para cada artículo. No importa lo que haga el grupo (: article_id), siempre devolverá el comentario más antiguo.

Saludos cordiales. Asbjørn Morell

Respuesta

3

Usted no encontrará una respuesta fácil con SQL - grupo sucede antes de una especie (ya que el grupo es generalmente para los datos agregados). Simplemente mantenga un campo latest_comment_id en su registro de artículos, y luego únase a los comentarios sobre latest_comment_id cuando encuentre sus artículos.

Si quiere varios comentarios por artículo, tendrá que recurrir a múltiples consultas o mantener una tabla temporal con los últimos comentarios por artículo.

16

Algo así como:

Comment.order('created_at DESC').all 

Eso debería hacerlo :)

Si lo que desea es el primer resultado, utilice first en lugar de all. También puede usar limit. Exemple para obtener los primeros resultados: 5

Comment.order('created_at DESC').limit(5).all 
+0

¿Pero cómo evitar seleccionar múltiples registros para cada artículo? Necesito un solo comentario para cada artículo, ordenado por creado en. – atmorell

+0

Bueno, no estoy seguro de que puedas hacer solo con los ayudantes de Rails. ¡Esto se ve bastante complicado! Hice algunas investigaciones en Google y encontré que: http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/ . Es esto lo que estas tratando de hacer ? Lo que sea, publique su solución si encuentra una;) –

+0

Eso es exactamente lo que estoy tratando de hacer. Buscaré la solución con la columna latest_comment_id en mi modelo de Artículos. – atmorell

1
Comment.group(:article_id).order('created_at DESC') 
+1

No funcionará. La consulta seleccionará todos los comentarios agrupados por article_id, pero el orden ocurrirá después de la parte del grupo; obtendrá el comentario más antiguo. – atmorell

Cuestiones relacionadas