IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Tri sur les dates [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier Avatar de urbalk
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 135
    Points : 71
    Points
    71
    Par défaut Tri sur les dates
    Bonjour,

    Dans une bd, j'ai des champs date stockés au format VARCHAR je cherche une combine pour trier ces champs par mois existe-il une combine ou suis je obligé de modifier le format de stockage de mon champs ?

    merci de votre aide.

  2. #2
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    ça dépend du format dans lequel tu stoque ta date dans ton champs texte...

    si c'est YYYYMMDD, 0 soucis pour faire tes tris
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  3. #3
    Membre régulier Avatar de urbalk
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 135
    Points : 71
    Points
    71
    Par défaut
    la valeur est stocké au format VARCHAR.... ex 10/01/2007

  4. #4
    Membre éclairé Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Points : 835
    Points
    835
    Par défaut
    Utiliser des varchar pour les dates, c'est MAL!
    Pour faire le tri, et bien tu va devoir t'amuser avec des ORDER BY split(date, '/'), etc.
    Remarque, je ne suis absolument pas sur de la syntaxe, enfin je suppose qu'il doit bien y avoir une fonction SPLIT en mysql...

  5. #5
    Membre régulier Avatar de urbalk
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 135
    Points : 71
    Points
    71
    Par défaut
    je m attendais un peu ace type de réponse je vais donc modifier mes champs et les passer en DATE mon pb est que je ne sais pas comment faire pour les afficher en format DD-MM-YYYY
    actuellement je regarde les cours php, mais je vais ettre obligé d'utiliser strtotime() devant chaque champs date ?
    merci

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    Moi j'utilise du varchar pour stocker mes dates, je trouve ca plus pratique et surtout plus permissif (si je change de sgbd je n'ai pas tous les problèmes de compatibilités donc pas de changement de code au moins).

    En revanche la notation à la francaise est, pardonnez moi l'expression, merdique. J'utilise donc la notation anglaise pour les stocker
    Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

    Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"

  7. #7
    Membre averti Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Points : 414
    Points
    414
    Par défaut
    Rien n'empeche le formatage en php pour eviter les modification sql lié à un changement de sgbd... au moins tu pourras plus facilement comparer et trier des date avec des vrai champs date.

    De plus si tu change de sgbd, il n'y aura pas que les fonctions sql à modifier...

    Donc c'est un peu une perte de temps et un ajout de code que de stocker des dates en texte.
    deY!

  8. #8
    Membre régulier Avatar de urbalk
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 135
    Points : 71
    Points
    71
    Par défaut
    bon,

    j'essaie ca mais sans aucun resultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	<?php echo $data['id'];?>&nbsp;&nbsp;
    	<?php echo $data['titre'];?>&nbsp;&nbsp;
    	<?php echo $data['date']; echo date("d-m-Y H:i",strtotime ("$data['date']"));?><br />
    le code est pas tres beau mais c est juste un bout pour essayer de comprendre !!
    si qq un 2 minutes pour eclairer ma lanterne.

    merci

  9. #9
    Membre averti Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Points : 414
    Points
    414
    Par défaut
    split ta date et reconstruit là avec mktime

    http://fr3.php.net/mktime

    Mais je continue à dire que ça serait beaucoup plus simple de mettre ton champ au format date. Puisque sous MySql tu pourrais faire un ORDER BY, et retourner ta date dans le format que tu souhaite avec DATE_FORMAT();

    En plus c'est pas comme si tu changeais de sgbd tous les jours.
    deY!

  10. #10
    Membre régulier Avatar de urbalk
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 135
    Points : 71
    Points
    71
    Par défaut
    bon j'ai un peux avancé mais ca coice tjrs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    // sélection DB 
    	mysql_select_db('testdate',$db)  or die('Erreur de selection '.mysql_error());
     
    // creation  requete 
    	$sql = "SELECT id, titre FROM modifdate";
     
    // envoie la requête
    	$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    // envoie la requête
    	$sql = "SELECT DATE_FORMAT(date,'%d/%m/%Y') FROM modifdate";
     
    // envoie la requête
    	$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    // boucle sur les enregistrments
             $alt=0;
             while($data = mysql_fetch_assoc($req))
                {
                 $alt%=2;
    // on affiche les info s
    ?>
    <br />	
    	<?php echo $data['id'];?>&nbsp;&nbsp;
    	<?php echo $data['titre'];?>&nbsp;&nbsp;
    	<?php echo $data['date'];?><br />	
    <?php	
    	 $alt++;
     }
    //end while
    je crois que les 2 requetes se melange les pinceaux et je n'arrive pas a trouver mon erreur

  11. #11
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut
    Unixtime les amis, unixtime...

    Y a que ca de vrai

  12. #12
    Membre averti Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Points : 414
    Points
    414
    Par défaut
    Ta seconde requête ecrase la premiere.

    pourquoi tu rassemble pas les deux en même temps ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT id, titre, DATE_FORMAT(date,'%d/%m/%Y') as date FROM modifdate
    C'est mieux je pense.
    deY!

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Pourquoi ne pas stocker tout simplement le timestamp ? En un nombre tu as toutes les infos sur ta date , enfin moi je trouve ca plus pratique.

    Après tu recupère le mois de ton timestamp ou alors tu fait un ORDER BY date DESC mais la tu aura le tri par tout les paramètres de la date et non plus par mois , je sais pas si c'est exactement ce que tu veut

  14. #14
    Membre averti Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Points : 414
    Points
    414
    Par défaut
    Timestamp c'est pratique quand tu veux une heure precise, mais pour une date toute simple ça sert a rien. Surtout si les champs date sont remplis manuellement et ne correxpondent pas à l'heure actuelle.

    Tu ne stock pas une date de naissance en timestamp.

    Aprés ça dépend de l'utilisation que tu en as, tu as de nombreuses façon de faire pour gérer tes dates.
    deY!

  15. #15
    Membre régulier Avatar de urbalk
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 135
    Points : 71
    Points
    71
    Par défaut
    merci a tous.

    @deY:
    j'ai oublier de preciser: j(ai passer mon champ au format DATE comme tu me le conseillais.

    pourquoi tu rassemble pas les deux en même temps ?
    Je n'y ai meme pas penser, j'ai 4 gros pepins (à mon niveau) que je n'arrive pas à résoudre ils me prennent la tête et commencent sérieusement a m'enervé en vrai !!!
    je teste et post.
    merci encore.

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    Hop petite précision du pourquoi je préfère le format texte.

    Je suis partisan d'une certaine rigueur, et le format date correspondrait volontiers à ceci si seulement les différents SGBD proposaient une écriture standard. Je pense entre autre à ACCESS.... bien que n'étant pas fan de ce SGBD je préfère ne pas me bloquer de porte lorsque je conçois la BDD.

    Aussi, afin d'être sur de ne pas modifier une parcelle de code pour pallier aux conflits d'interets de messieurs les créateurs de SGBD, je préfère utiliser un format passe partout : le VARCHAR. Certes je suis peut etre amené à écrire un peu plus de code à la création, mais cela m'assure une maintenance zéro (enfin façon de parler) si jamais on change de SGBD

    Cela ne reste que mon point de vue, pas une vérité absolue ^^
    Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

    Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"

  17. #17
    Membre averti Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Points : 414
    Points
    414
    Par défaut
    Oui c'est sur que c'est une solution de facilité, mais lors de la création de ta base, tu passes par une phase d'analyse et on doit appeler un chat un chat. Tu ne changes pas de sgbd tous les jours, alors tu as voulu trop vite et tu te rend compte que ton premier choix ne correspond pas.

    Je ne vois aucun mal à mettre tous les champs en type texte, mais de toute façon si tu change de sgbd, tu es forcé de modifier ta base et ton code même pour un champs texte. En plus rien ne te force à utiliser des fonctions sql compliqué, tu peux tout faire dans ton code, si tu ne veux pas perdre une portabilité sur un autre sgbd.

    Si tu utilise des fonctions concat, date_format, ou autre ça pose probléme oui, mais si tu n'applique que des requêtes sql stricts ça ne pose aucun soucis.

    Moi personnellement je ne travail que sur PgSql, il est gratuit et puissant, un bon compromis entre un mysql assez limité, et un Oracle payant ou un SqlServer trop compliqué.

    Mais c'est mon avis, et chacun utilise ce qu'il veut, mais c'est vraiment trop ce compliqué la vie que de mettre un champs texte pour une date, c'est comme saisir manuellement un identifiant, alors qu'il y a des AUTO_INCREMENT ou des SERIALS.

    deY!

  18. #18
    Membre éclairé Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Points : 835
    Points
    835
    Par défaut
    On peut quand même faire un certain nombre de choses avec des champs varchar pour les dates, tant qu'on garde le format anglophone; on peut par exemple faire un ORDER BY sans problèmes.

  19. #19
    Membre averti Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Points : 414
    Points
    414
    Par défaut
    Oui, mais tu te vois demander à un utilisateur de saisir sa date au format anglophone ? Ca t'oblige donc à split et refaire ta date en format anglophone pour l'insérer en texte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    list($j, $m, $a) = explode("/", $date);
    $date = $a.'-'.$m.'-'.$j;
    au lieu de (avec pgsql)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    to_date('23/01/2007', 'DD-MM-YYYY')
    Et en cas d'insertion automatique tu dois recupére la date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $date = date('d/m/Y');
    Puis la mettre dans ta requête alors que tu peux mettre en valeur par default
    NOW() ou autre pour un champs date.

    Donc je reste sur ma position, je trouve ça galére, en tout cas je ne me suis jamais retrouver dans une situation ou un varchar était mieux.

    Mais bon, c'est pas vraiment le sujet du topic
    deY!

  20. #20
    Membre régulier Avatar de urbalk
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 135
    Points : 71
    Points
    71
    Par défaut
    deY!,

    C'est OK mais, car il y a un mais, sur un seul champ date !

    explications:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = "SELECT id, titre,datevent,proprio,messaG,heure,date, DATE_FORMAT(date,'%d/%m/%Y') as datevent,date
    J'ai 2 champs au format DATE date (jour du post) et datevent (jour de l'événement) la requète ci-dessus convertit uniquement le champs datevent.

    Comment procéder pour que les 2 champs soient convertis dans cette même requète ???

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Tri sur les dates
    Par Aurazed dans le forum Langage SQL
    Réponses: 6
    Dernier message: 12/06/2007, 10h02
  2. [BATCH] Tri sur les dates de fichiers
    Par tonf dans le forum Windows
    Réponses: 1
    Dernier message: 26/04/2007, 16h25
  3. Problème de tri sur les dates par année puis mois
    Par rob2-9 dans le forum Access
    Réponses: 26
    Dernier message: 11/08/2006, 11h04
  4. [Dates] tri sur les dates
    Par udta5371 dans le forum Langage
    Réponses: 5
    Dernier message: 13/07/2006, 21h49
  5. Tri sur les dates
    Par ShadoX dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 08/06/2006, 11h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo