Trier un tableau sur un champ fictif

Signaler
Messages postés
130
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
8 décembre 2015
-
Messages postés
354
Date d'inscription
dimanche 3 juin 2001
Statut
Membre
Dernière intervention
11 mars 2013
-
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

Messages postés
354
Date d'inscription
dimanche 3 juin 2001
Statut
Membre
Dernière intervention
11 mars 2013

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
Messages postés
130
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
8 décembre 2015

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
Messages postés
354
Date d'inscription
dimanche 3 juin 2001
Statut
Membre
Dernière intervention
11 mars 2013

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
Messages postés
130
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
8 décembre 2015

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
Messages postés
354
Date d'inscription
dimanche 3 juin 2001
Statut
Membre
Dernière intervention
11 mars 2013

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.
Messages postés
130
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
8 décembre 2015

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
Messages postés
354
Date d'inscription
dimanche 3 juin 2001
Statut
Membre
Dernière intervention
11 mars 2013

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.