8796 sujets

Développement web côté serveur, CMS

Bonjour à tous Smiley smile

J'ai une requête MySQL que je dois réaliser mais je n'y parvient pas ... cela dépasse visiblement mes compétences actuelles. J'espère donc que l'un d'entre vous pourra m'aider.

Dans la requête suivante, je ne prends en compte que le paramètre WHERE. Lequel doit aller chercher dans une base de donnée tous les congés depuis le début de l'année. Les dates sont dans un format très particulier, à savoir "12|:|01|:|2010" pour le 01/12/2010. Donc, pour retourner toutes les données de 2010, je procède ainsi (récupérer toutes les données se terminant par 2010) :

service_day REGEXP "2010$"


Jusque là, aucun soucis. Là où ça commence à être plus embêtant, c'est pour classer les résultats par ordre chronologique directement à partir de la requête. Via le paramètre ORDER donc. Quelqu'un saurait-il comment procéder avec ce type d'entrée ?

Merci d'avance à tous,
Gaylord.P. Smiley smile
Modifié par Gaylord.P (22 Nov 2010 - 18:25)
Bonjour,

le plus pratique serait de recréer un champ calculé dans la requête qui puisse être triable (un VARCHAR avec le format YYYY/MM/DD ou bien de type DATE carrément) à l'aide par exemple des fonctions MySQL SUBSTRING() et CONCAT() en décomposant/recomposant le champ actuel.

Cela étant dit, ne serait il pas possible dans votre cas d'avoir de base un champ de type DATE ou DATETIME, cela permet d'éviter ce genre de manipulation en conservant la possibilité de faire une recherche par année. Au passage je pense qu'en terme de performance un LIKE est plus rapide qu'un REGEXP, et un champ DATE est plus petit à stocker qu'un VARCHAR pour une date.