Aller au contenu

Tri MySql par date


francoisch

Sujets conseillés

Bonjour

Dans une table MySql, jai une colonne nommée date mal foutue (déclarée à lorigine en format Varchar) de ce type :

04/11/2008

Jai besoin de faire des tris sur la date qui aient un sens, ce qui nest pas le cas ici, du moins avec un Order by simple.

Jessaie donc dalimenter une nouvelle colonne nommée date2, déclarée en format Date, avec le contenu reformaté de date avec :

UPDATE compteur SET date2 = CAST(date AS DATETIME)

Le code sexécute mais les valeurs dans date2 sont toujours à :

0000-00-00

Merci par avance de vos suggestions pour alimenter date2 avec un format de date depuis le contenu de date.

Ou bien faire des tris sur date telle quelle est avec un ordre MySql un peu rusé ?

Francois

Lien vers le commentaire
Partager sur d’autres sites

Tout dépend de ta version de MySQL. Si tu es en <= 4.0.x, CAST() ne fait que convertir le type du champ sans tenir compte de la valeur.

Pour les versions >= 4.1.x

Cela dépend de ton script. Par exemple

$query = "SELECT * FROM compteur";
$result = mysql_query($query, $cnx) or die(mysql_error());
$row_result = mysql_fetch_assoc($query);
do {
$querymaj = "UPDATE compteur SET date2 = CAST('".$row_result['date']."' AS DATE) WHERE date = '".$row_result['date']."'";
$resultmaj = mysql_query($querymaj, $cnx) or die(mysql_error());
} while ($row_result = mysql_fetch_assoc($query));

Comme je ne suis pas certains que CAST() permette de faire ce que tu veux, dans le pire des cas, dans la boucle Do/While, tu fais un explode() de $row_result['date'] et tu le modifies pour obtenir le format voulu que tu remplaces dans la requête $querymaj et là pas de souci cela marchera quelque soit ta version de MySQL.

++

Patrick

Lien vers le commentaire
Partager sur d’autres sites

bonjour Patrick et merci de ta réponse.

Ma version MySQL: 5.0.67.

Ton code: j'ai fait:

- un Copier / Coller direct

- comme il sortait deux erreurs, j'ai remplacé $query par $result dans les deux mysql_fetch_assoc (OK?)

Résultat: la colonne date2 est tjs à 00.

Il me manque qqechose?

Francois

Lien vers le commentaire
Partager sur d’autres sites

Désolé je ne l'ai pas tester avant de le mettre en ligne,méa culpa.

Je te le refais demain à la pause déjeuner et je le testerai pour être certain qu'il fonctionne. (à moins que je sois devancé par quelqu'un d'autre) Cela doit venir de CAST() qui ne converti pas automatiquement.

Pas de souci je te prépare la version brut de pomme et ça marchera.

Patiente jusqu'a demain ...

(je quitte le bureau là)

++

Patrick

Lien vers le commentaire
Partager sur d’autres sites

oups je lme suis oublié ...

Désolé, je viens d'arriver au bureau, je te prépare ça entre 2 emails.

Tiens voilà, essaie ça

<?php
$cnx = mysql_pconnect("hostname", "username", "password") or trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db("database", $cnx);
$query = "SELECT * FROM compteur";
$result = mysql_query($query, $cnx) or die(mysql_error());
$row_result = mysql_fetch_assoc($result);
do {
$old = explode("/",$row_result['date']);
$new = $old[2]."-".$old[1]."-".$old[0];
$querymaj = "UPDATE compteur SET date2 = '".$new."' WHERE date = '".$row_result['date']."'";
$resultmaj = mysql_query($querymaj, $cnx) or die(mysql_error());
} while ($row_result = mysql_fetch_assoc($result));
?>

++

Patrick

Lien vers le commentaire
Partager sur d’autres sites

Merci Patrick de ta réponse.

Impeccable, ça fonctionne de manière splendide; je n'ai pas eu à y faire une seule modification, ce dont j'aurai peut être bien été incapable.

Je peux maintenant trier mes centaines d'enregistrements sur la date.

Je vais maintenant pouvoir modifier mes programmes pour qu'ils produisent dans la nouvelle colonne des dates au bon format.

Merci encore de ton aide.

Francois

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...