Comment ordonner naturellement des noms qui incluent des chiffres avec MySQL

Dans un projet de commerce électronique, j’avais la tache d’ordonner des produits selon leur nom, une fonction courante et généralement simple. Par contre, dans ce cas, les noms finissaient par des chiffres, et comme la plupart des fonctions en informatique, ceux-ci étaient ordonnés de la façon suivante:


Produit #1
Produit #11
Produit #12
Produit #2
Produit #3
(...)

Ce qui est logique en informatique si on évalue leur valeur littérale pour une liste alphabétique, mais les êtres humains préfèrent évidemment une liste qui considère la valeur numérique de l’identifiant, non sa valeur littérale, ou, par exemple, 11 est plus grand que 2, comme suit:


Produit #1
Produit #2
Produit #3
(...)
Produit #11
Produit #12

Comment faire en PHP et MySQL? L’idée générale est d’isoler la partie chiffrée du nom et de la considérer comme un nombre. Voici l’expression MySQL initiale:

$query = "SELECT * FROM table ORDER BY ProduitNom ASC";

Et voici l’expression MySQL qui évalue plutôt le nombre après le symbole #:

$query = "SELECT * FROM table ORDER BY SUBSTRING_INDEX(ProduitNom . ", \"#\", -1) + 0 ASC";

La fonction MySQL SUBSTRING_INDEX nous permets d’extraire le nombre après le symbole # (le numéro négatif qui suit, -1, détermine dans ce cas la direction à prendre dans le morceau de texte) et la partie + 0 (un petit truc légèrement ésotérique) force MYSQL à considérer la valeur numérique du nombre, et non sa valeur littérale.

Partager cet article:

  • del.icio.us
  • Facebook
  • StumbleUpon
  • Twitter
  • LinkedIn

Catégories: Programmation web | Aucun commentaire »
Les tags de cet article:

Note: Merci pour vos commentaires, j'apprécie ceux qui partagent leurs avis et leurs expériences de webmestre, ou s'il y a lieu, indiquent une erreur dans mes tutoriels, mais je ne peux évidemment pas faire de support technique pour votre site, alors veuillez éviter d'en faire la demande dans cette section.

Laisser un commentaire