Pregunta

En un proyecto de Rails, estoy usando Sphinx junto con el complemento Thinking Sphinx. Indizo una tabla con un atributo: foo que es flotante.

Mi comportamiento deseado al ordenar por columna: foo sería que los valores nulos siempre aparecen al final de la lista, por ejemplo

id; foo (order foo desc)
-------
1; 5
2; 3
3; -4
4: -5
5: nil
6: nil


id; foo (order foo asc)
-------
4: -5
3; -4
2; 3
1; 5
5: nil
6: nil

Si fuera sql normal, ordenaría como:

:order => "(foo IS NULL) ASC, foo DESC"

Pero parece que no es posible, ya que creo que los valores NULL se traducen a 0 (¿es cierto?). El uso de expresiones de ordenación de esfinge parece no ordenar mis flotadores correctamente.

¿Alguien resolvió este problema o tiene una idea sobre cómo hacerlo?

¿Fue útil?

Solución

La solución que ha proporcionado es lo que sugeriría: como sí, tiene razón, Sphinx trata los NULL como 0.

Otros consejos

Una solución que se me ocurrió mientras tanto es indexar un atributo adicional, como este:

define_index do 
  indexes foo, :sortable => true
  has "foo IS NULL", :as => :foo_nil, :sortable => true
end

qué me permite ordenar así

:order => "foo_nil ASC, foo DESC"

Es un poco torpe, especialmente porque tengo muchos atributos que quiero haber ordenado así.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top