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.
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.
ç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
la valeur est stocké au format VARCHAR.... ex 10/01/2007
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...
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
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
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.
bon,
j'essaie ca mais sans aucun resultat
le code est pas tres beau mais c est juste un bout pour essayer de comprendre !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <?php echo $data['id'];?> <?php echo $data['titre'];?> <?php echo $data['date']; echo date("d-m-Y H:i",strtotime ("$data['date']"));?><br />
si qq un 2 minutes pour eclairer ma lanterne.
merci
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.
bon j'ai un peux avancé mais ca coice tjrs
je crois que les 2 requetes se melange les pinceaux et je n'arrive pas a trouver mon erreur
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'];?> <?php echo $data['titre'];?> <?php echo $data['date'];?><br /> <?php $alt++; } //end while
Unixtime les amis, unixtime...
Y a que ca de vrai
Ta seconde requête ecrase la premiere.
pourquoi tu rassemble pas les deux en même temps ?
C'est mieux je pense.
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT id, titre, DATE_FORMAT(date,'%d/%m/%Y') as date FROM modifdate
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
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.
merci a tous.
@deY:
j'ai oublier de preciser: j(ai passer mon champ au format DATE comme tu me le conseillais.
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 !!!pourquoi tu rassemble pas les deux en même temps ?
je teste et post.
merci encore.
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 ^^
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.
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.
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.
au lieu de (avec pgsql)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 list($j, $m, $a) = explode("/", $date); $date = $a.'-'.$m.'-'.$j;
Et en cas d'insertion automatique tu dois recupére la date
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 to_date('23/01/2007', 'DD-MM-YYYY')
Puis la mettre dans ta requête alors que tu peux mettre en valeur par default
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $date = date('d/m/Y');
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!,
C'est OK mais, car il y a un mais, sur un seul champ date !
explications:
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.
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
Comment procéder pour que les 2 champs soient convertis dans cette même requète ???
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager