Orden de la esfinge: valores nulos / nulos últimos
-
06-07-2019 - |
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?
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í.