Question

Sur un projet Rails, j'utilise Sphinx avec le plug-in Thinking Sphinx. J'indexe une table avec un attribut: foo qui est un float.

Mon comportement souhaité lors du tri de colonne: foo serait que des valeurs nulles apparaissent toujours à la fin de la liste, par exemple.

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

S'il s'agissait d'un SQL normal, je trierais comme suit:

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

Mais cela ne semble pas possible, car je pense que les valeurs NULL sont traduites en 0 (est-ce vrai?). L'utilisation d'expressions de commande de sphinx ne semble pas trier correctement mes flotteurs.

Quelqu'un at-il résolu ce problème ou a-t-il une idée de la façon de le résoudre?

Était-ce utile?

La solution

La solution que vous avez fournie correspond à ce que je suggérerais - puisque oui, vous avez raison, Sphinx traite les valeurs NULL comme des 0.

Autres conseils

Une solution que j'ai trouvée entre-temps consiste à indexer un attribut supplémentaire, comme ceci:

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

ce qui me permet de commander comme ceci

:order => "foo_nil ASC, foo DESC"

C'est un peu maladroit, d'autant plus que j'ai beaucoup d'attributs que je veux avoir commandés comme ça.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top