Trier un tableau sur un champ fictif

cs_nitho Messages postés 130 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 8 décembre 2015 - 4 avril 2010 à 22:50
JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013 - 7 avril 2010 à 11:42
Bonjour à tous,
dites j'ai un problème, je veux trier un tableau suivant un champ fictif. Je m'explique, j'ai une table mysql qui contient un champ "dernière date" et un champ "périodicité". Pour l'afficher dans une page php j'utilise un tableau et dans ce tableau j'ai créé une colonne prochaine date, dont les valeurs sont fonction des valeurs des colonnes précédente. (Prochaine date = Dernière date + Périodicité)
A présent j'aimerais trier mon tableau php suivant le champ prochaine date. Comment faire? Si ce champ était dans ma table ça aurait été facile avec les requêtes SQL, mais là.... Aidez moi s'il vous plait.

Merci d'avance.



nitho l'amateur

7 réponses

JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013
5 avril 2010 à 10:57
Il est possible d'effectuer directement ton calcul dans ta requete MySQL , il y'a des fonctions toutes faires pour ça ;-)

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-add
0
cs_nitho Messages postés 130 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 8 décembre 2015
5 avril 2010 à 14:26
En fait je vais simplifier ma question: Est-il possible d'écrire:

SELECT *, date_add(derniere_date, periodicite) as bijoux
FROM matable
ORDER BY bijoux

en sachant que date_add est une fonction php et que derniere_date et periodicite sont des champs de matable

Merci pour vos contributions.


nitho l'amateur
0
JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013
5 avril 2010 à 14:28
Non, tu ne peux pas mélanger tel quel. Par contre, Mysql te permet de réaliser le calcul grâce à DATE_ADD (qui elle est une fonction MySQL). Après pour pouvoir être plus complet, il me faudrait le format de tes chamos derniere_date et periodicite
0
cs_nitho Messages postés 130 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 8 décembre 2015
5 avril 2010 à 14:52
derniere_date est au format datetime
periodicite est au format varchar j'y mais des date_interval (ex P5D)

En fait j'ai choisit ces natures de champs pour pouvoir utiliser la fonction date_add de php, si tu pense qu'il faut changer la nature de mes champs dit le moi stp. et pour les fonctions mysql je ne les connais pas trop donc s'il y a des spécificités dit moi comment faire stp.

Merci d'avance
nitho l'amateur
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013
5 avril 2010 à 15:02
C'est pour ça que je t'ai passé la page de manuel de MySQL ;-)

en repartant de l'exemple (dans le manuel):

SELECT DATE_ADD('1900-01-01 00:00:00', INTERVAL '-1 10' DAY);

je pense qu'n peut l'adapter comme ça:

SELECT DATE_ADD(derniere_date,INTERVAL intervale DAY);
avec ton champs 'intervale' contenant le nombre de jours à ajoutter.

Tu trouveras dans le manuel les nombreux formats possibles pour rajoutter des jours/heures etc.
0
cs_nitho Messages postés 130 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 8 décembre 2015
6 avril 2010 à 14:40
Quelqu'un pourrait me dire pourquoi cette requête ne marche pas?


SELECT Code_equipement, date_add(Derniere_date, Periode) as Rien
FROM preventives



erreur 1064
dans le champ Derniere_date est du type date et le champ periode du type varchar avec des valeurs telles que 'INTERVAL 5 DAY'



nitho l'amateur
0
JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013
7 avril 2010 à 11:42
Visiblement ce n'est pas possible de tout stocker dans ta table. INTERVAL et DAY (ou toute autre unité) étant des mots clés, tu ne peux pas les stocker avec la valeur dans la table.

Pas terrible niveau flexibilité du coup, quoi que tu peux utiliser des unités plus flexibles, comme DAY_SECOND par exemple.

Là encore, la doc est pas trop mal faite.
0
Rejoignez-nous