Trie date au format texte

Résolu/Fermé
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 - 15 août 2010 à 09:27
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 - 21 sept. 2010 à 07:45
Bonjour,

Je voudrais pouvoir afficher mes dates dans l'ordre croissant.
Mais malheureusement mes dates dans ma BDD sont aux formats texte.
Cela m'ennuie de changer en format DATE car ça fonctionne très bien en format texte de plus j'ai mis un calendrier Jquery.
existe t-il une fonction mais je ne suis pas trop doué en PHP.
Si quelqu'un pouvait m'aider et me dire ce qu'il en pense.
Je vous remercie beaucoup de votre aide


A voir également:

17 réponses

louloute300 Messages postés 335 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 28 novembre 2012 29
15 août 2010 à 19:20
Je te propose de créer une petite fonction qui pourrait te permettre de transformer tes dates de format jj/mm/yyyy au format "secondes" de linux:

Cela te permet de renvoyer le nb de secondes écoulés depuis 01/01/1970; Ainsi, tu obtiens tes dates dans l'ordre croissante...

date("U", $madate);

Sinon, autrement, il faut faire une fonction plus complexe, et "fouiller" inutilement dans ta table 2 fois...

Si tu veux plus de détails...
2
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
15 août 2010 à 21:54
Merci de ton aide précieuse ç'est très sympa de pouvoir m'aider il y a trop lomptemps que je galère pour mettre mes dates dans l'ordre croissant.
Merci
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
12 sept. 2010 à 10:05
Bonjour

Je reviens sur mon problème que je n'arrive pas à solutionner.
En vous remerciant beaucoup, j'ai vraiment besoin de votre aide.

une petite récap de mon problème

Dans mes formulaires j'ai intégrer beaucoup de date au format texte avec un calendrier jquery qui fonctionne super.
Je ne souhaite pas changer dans ma BDD et mettre au format date.
et pourtant il faut que mes dates qui sont bien entendu au format texte se classe dans un ordre croissant.
Existe t-il une fonction pour la classement des dates?
Merci beaucoup de votre aide.
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
12 sept. 2010 à 20:28
Une petite aide me serai très précieux.

Merci beaucoup
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
12 sept. 2010 à 21:29
une piste:

//si ton_champ_date au format jj/mm/yyyy
//on va découper la date en yyyy  mm  jj  et reconcatener tout ça dans le bon ordre, celui compris par mysql et lui donner un surnom qui sert au tri
//au besoin vas voir chaque fonction sur G.....
$query="SELECT CONCAT('',SUBSTRING(ton_champ_date,7,4),SUBSTRING(ton_champ_date,4,2),SUBSTRING(ton_champ_date,1,2)) as date_format_mysql ORDER BY date_format_mysql ASC ";
0

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

Posez votre question
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
13 sept. 2010 à 13:58
Bonjour et grand merci pour votre aide.

Malheureusement je ne comprend pas très bien pour ne pas dire pratiquement rien.
Mais ce n'ai pas vos explications c'est ma connaissance en SQL et PHP qui me fait défault.
En effet je débute dans ce domaine c'est pourquoi un peu plus de détail me serait peut-être utile.
Je connait quelques rudiment mais ça s'arrête là.
C'est déjà pour ça que j'ai mis tous les champs de ma table en format texte.
Mais maintenant si je veux aller plus loin avec mes dates, je suis perdu.
Merci encore de votre aide afin que je puisse avancé sur mon site.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
13 sept. 2010 à 14:38
si on fait une requette sql avec un tri sur ton_champ_date qui est au format texte et de plus français je suppose, mysql ne peut pas faire le tri, pour lui il faut qu'il ait la date au format yyyymmdd

par ex: 20100911 est plus petit que 20100912


donc on demande au moment de la requette à mysql de faire une conversion de ce format

SUBSTRING(ton_champ_date,7,4)
coupe la date de ton_champ_date a partir de 7 caracteres et sur une longueur de 4 => année
idem pour les autres

ensuite on réaboute tout ça par CONCAT
et à la valeur obtenue on lui donne un surnom
as date date_format_mysql

et on demande à mysql de trier par rapport à ça
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
14 sept. 2010 à 00:12
Merci
J'arrive à comprendre un peu demain je regarde ça et je dis ce qu'il en ai.

Encore merci de ta précieuse explication et de ton aide bien sur.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
14 sept. 2010 à 09:17
$query="SELECT CONCAT('',SUBSTRING(ton_champ_date,7,4),SUBSTRING(ton_champ_date,4,2),SUBSTRING(ton_champ_date,1,2)) as date_format_mysql ORDER BY date_format_mysql ASC ";
attention la requette n'est pas complete


il manque le FROM ta_table

$query="SELECT CONCAT('',SUBSTRING(ton_champ_date,7,4),SUBSTRING(ton_champ_date,4,2),SUBSTRING(ton_champ_date,1,2)) as date_format_mysql FROM ta_table ORDER BY date_format_mysql ASC ";
0
ou alors en php:


mysql_connect()...
...
// ta connection


$SQL = mysql_query('SELECT id,date FROM ta_table')or exit(mysql_error());

while ($donnee = mysql_fetch_array($SQL)){ // on prend toutes les dates
$tableau_date = explode('-',$donnee['date']; // on découpe la date
$new_date = mktime('0','0','0',$tableau_date[1],$tableau_date[0],$tableau_date['2']);
mysql_query('UPDATE ta_table WHERE date="'.$new_date.'" WHERE id='.$donnee['id'])or exit(mysql_error());
}




Essaye un truc du genre.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
14 sept. 2010 à 12:54
ok mais avec cette méthode tu UPDATE au nouveau format les valeurs de dates existantes dans la base, et que deviendront les nouvelles entrées ?
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
14 sept. 2010 à 17:48
Bonjour Alain_42,

Ta méthode me semble bien je commence un peu à comprendre comment je pourrai m'en sortir mais cela reste encore un peu flou.
Pourrais tu encore me guider?
En fait il faut découper la chaine de caractéres qui est "ma date" avec la fonction substring ?

Mon format texte de mon champ date est par exemple

mercredi 25 septembre 2010

Et ma requéte SQL je l'insére dans mon formulaire ?

Merci encore de ton aide.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
14 sept. 2010 à 18:57
Mon format texte de mon champ date est par exemple

mercredi 25 septembre 2010


alors la methode que je t'ai donnée ne peut pas marcher, il ne faut que des chiffres par ex 13/09/2010

il faut trouver une autre solution en faisant faire le tri via un array php

qu'affiches tu en plus de la date, (quels autres champs de ta table) ?

Et ma requéte SQL je l'insére dans mon formulaire ?


la je ne peut te répondre ne sachant pas ce que tu veux faire
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
14 sept. 2010 à 19:31
En fait
J'ai mes dates de sortie et j'affiche dans un tableau toutes ses dates via un calendrier jquery et ma date comme je te disais c'est
"mercredi 25 septembre 2010"
et je voudrais les classer dans ce tableau par ordre croissant.

<td>Date de la sortie :</td>
<td><input id="date_sortie" class="date_input" name="user_date_sortie" size="30" value="<?php echo @$rows->date_sortie ?>" type="text" disabled=""/>
<img src="image/calendar.gif" id="monImage4"/></td>


ma table c'est "sortie"
mon champ c'est "date_sortie"

et mon tableau
<table id="ad_list" cellpadding="0" cellspacing="0">
        <tr>
            <th width="20%">Dates<br/>des sorties</th>
            <th width="20%">Lieu</th>
            <th width="20%">Commentaire</th>
       </tr>
</table>


En te remerciant de l'aide que tu peux m'apporter.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
15 sept. 2010 à 08:53
on est obligé de passer par une étape intermédiaire, on lit la table, on mémorise dans un array à deux dimensions, on travaille sur cet array on le tri et on affiche à partir de cet array trié

je n'ai pas la même méthode que toi pour lire la table mais le résultat est le même

as tu des accents dans les noms des mois ?? si oui ça va poser pb

<?php
// tri par date au format fr dans un champ type text
//et au format mercredi 15 septembre 2010

//taleaux de correspondance mois => numeros
$array_mois=array("janvier"=>"01","février"=>"02","mars"=>"03","avril"=>"04","mai"=>"05","juin"=>"06","juillet"=>"07","aout"=>"08","septembre"=>"09","octobre"=>"10","novembre"=>"11","decembre"=>"12");

//connexion BDD
$cnx=mysql_connect('localhost','root','');
$db=mysql_select_db('essai_tri');

$query="SELECT * FROM sortie ";
$result=mysql_query($query) or die ("Pb avec la requette: ".$query."<br />".mysql_error());

//init de l'array dans lequel on mémorise les resultats ce sera un array à deux dimensions
$array_sorties=array();

while($data=mysql_fetch_assoc($result)){
    //on decoupe la date mercredi 15 septembre 2010 par rapport à espace
    $array_date_alpha=explode(' ',$data['date_sortie']); 
    //on transforme le mois en numerique en se basant sur le tableau de correspondance mois=>num mois
    $mois_format_num=$array_mois[strtolower($array_date_alpha[2])]; //strtolower c'est pour mettre en minuscules avant de lire dans le tableau
    //on remet toute la date au format yyyymmjj numérique
    $date_format_numerique=$array_date_alpha[3].$mois_format_num.$array_date_alpha[1];
    //on s'en sert comme cle pour l'array
    $array_sorties[$date_format_numerique]['date_sortie']=$data['date_sortie'];
    $array_sorties[$date_format_numerique]['lieu']=$data['lieu'];
    $array_sorties[$date_format_numerique]['commentaire']=$data['commentaire'];
    
}

/*
////TEST
//Visualisation contenu array
echo '<pre>';
print_r($array_sorties);
echo '</pre>';
////////
*/

    //on va trier l'array par rapport aux clefs donc par rapport à cette date numérique
    ksort($array_sorties);
    
/*
////TEST
//Visualisation contenu array trié    
echo '<pre>';
print_r($array_sorties);
echo '</pre>';
////////
*/

?>

<table id="ad_list" cellpadding="0" cellspacing="0">
        <tr>
            <th width="20%">Dates<br/>des sorties</th>
            <th width="20%">Lieu</th>
            <th width="20%">Commentaire</th>
       </tr>
<?php
    //on parcours le niveau 1 (les dates num)de l'array trié pour afficher les valeurs correspondantes  (lieu, commentaire))contenues dans le niveau 2  ($s_array))
    foreach($array_sorties as $cle=>$s_array){
?>
        <tr>    
            <td>
                <input type="text" id="date_sortie" class="date_input" name="user_date_sortie" size="30" value="<?php echo $s_array['date_sortie']; ?>"  disabled="" />
                <img src="image/calendar.gif" id="monImage4"/>
            </td>
            <td>
                <input type="text" id="lieu_sortie" class="date_input" name="user_lieu_sortie" size="30" value="<?php echo $s_array['lieu']; ?>"  disabled="" />
            </td>
            <td>
                <input type="text" id="commentaire_sortie" class="date_input" name="user_commentaire_sortie" size="30" value="<?php echo $s_array['commentaire']; ?>"  disabled="" />
            </td>
        </tr>
<?php    
    }
?>     
</table>
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
15 sept. 2010 à 22:35
Bonjour et un très grand merci de ta réponse.

Je viens de te lire et demain après-midi je m'y penche dessus.
Je te tiens au courant mais déjà je te remercie du temps passé sur mon problème.

A demain ou Vendredi au plus tard

Encore merci
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
18 sept. 2010 à 00:14
Bonjour

Je suis en train de mettre en place ton script que tu m'as fait tu as dû y passer un bon moment je te remercie
Il y a une petite chose que je ne comprend pas mais je vais essayer d'arriver à le mettre en place dans ma page.

Je te tiens au courant peut-être si ça t'ennuie pas de m'aider le cas échéant ou j'aurai des problèmes.
Encore merci
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
21 sept. 2010 à 07:45
Un très grand merci à toi Alain_42 j'ai réussi avec un peu de temps à mettre en place ton script seul je n'y serai pas arrivé.
Ca marche nickel
Merci encore
0