Page 1 sur 1

Problème sur un order by date

Posté : 02 nov. 2005, 15:38
par saebakun
Bonjour,

j'ai un leger problème sur mes dates dans une table...

J'ai un champ varchar avec jour-mois-annee (01-12-2004)

je fais un

select * from table order by date;

mais mon problème et qu'il classe d'abord les jours (normal) donc j'ai toutes les lignes qui correspondent au premier de chaque moi puis les seconds de chaque mois au lieu de chaque moi en priorité. Ce qui est normal vu que j'ai mis les dates à la fr... (ce que je regrette vraiment là)

Donc si quelqu'un a une idée pour que je puisse avoir le résultat normal :/ pour m'eviter de devoir modifier tout mes codes et ma db en mettant mois-jours-année.

Merci

Posté : 02 nov. 2005, 15:43
par DarkBlue
Moi je pense que le plus simple c est de modifier ta base et ton script ( t en as pas pour longtemps t as juste a inverser 'd' et 'm' dans ton script et remplacer Varchr par date dans la base )

Ce qui va te prendre 5 minutes et t eviter bien des galeres !

Posté : 02 nov. 2005, 15:43
par charabia
C'est tout à fait normal que tes dates soient mal triées. Il faut utiliser le type DATE et non pas VARCHAR si tu veux faire un tri correct.

Tu utilises ensuite une fonction simple qui t'affiche d'abord le jour au lieu de l'année.

Exemple ici

Posté : 02 nov. 2005, 15:59
par saebakun
Je n'arrive pas à changer le type de ma collonne il me dit

column date cannot be cast to type date

Posté : 02 nov. 2005, 16:05
par charabia
Je n'arrive pas à changer le type de ma collonne il me dit

column date cannot be cast to type date
A faire en dernier recours si le changement est impossible :
- exportes ta table (avec "aucune" comme compression)
- copies le "sql" de création de ta table et les données (à savoir le CREATE TABLE et tous les INSERT INTO)
- remplaces la ligne de ta date par : `date` date NOT NULL default '0000-00-00',
- supprimes ta table
- va dans SQL, colles le tout et exécutes.

Là tu devrais avoir ta nouvelle table correct. N'oublies pas de changer ensuite la date dans ta base : aaaa-mm-jj

Posté : 02 nov. 2005, 16:09
par pitt
C'est normal si tu as des données de type varchar dans ta colonne il ne peut pas modifier le type du champ soit tu vides ta table, tu changes et tu reimplémente soit si tu as beaucoup de données tu recrées une colonne date correcte tu écris un script qui vas récupérer tes dates de type varchar et un id et tu remplis avec une petite fonction ta nouvelle colonne et ensuite tu peux supprimer la colonne date en varchar

resolu

Posté : 03 nov. 2005, 16:19
par saebakun
c'est bon j'ai resolu mon pb.

J'ai créé une nouvelle colonne "dates"

et j'ai fait ce code:

<?
$connect=pg_connect("user=user password=password dbname=dbname");
$sql="SELECT date, id from livraison where date like '%-%-2004' order by date;";
$resultat=pg_query($connect,$sql);

while($row = pg_fetch_array($resultat))

{
$date=$row["date"];
$id=$row["id"];

$jour=substr($date, 0, 2);
$mois=substr($date, 3, 2);
$annee=substr($date, 6, 4);

$dates="$annee-$mois-$jour";

$update=pg_query($connect, "UPDATE livraison SET dates = '$dates' where id = '$id';");

}

?>
on met l'année que l'on veut modifier et hop c'est parti :D j'ai plus qu'à supprimer ma colonne "date" et c'est bon :)

Merci tout le monde.

Re: resolu

Posté : 03 nov. 2005, 16:28
par charabia
on met l'année que l'on veut modifier et hop c'est parti :D j'ai plus qu'à supprimer ma colonne "date" et c'est bon :)

Merci tout le monde.
:shock: Pourquoi supprimer la colonne que tu viens de créer...? J'ai pas tout saisis là...

Posté : 03 nov. 2005, 16:32
par albat
Peut-être parce que date est un mot réservé
et que créer un champ portant ce nom est plutôt une mauvaise idée... ;)

Posté : 03 nov. 2005, 16:37
par saebakun
Attention j'ai une collonne "date" avec le mauvais format et une colonne "dates" en bon format :)

Posté : 03 nov. 2005, 16:42
par albat
Oui. En fait, je répondais à Charabia.
Le nom dates est licite.

Posté : 03 nov. 2005, 16:46
par saebakun
oui on est d'accord :)

et bien merci pour les coups de mains :D

Posté : 03 nov. 2005, 16:56
par charabia
Oui. En fait, je répondais à Charabia.
Le nom dates est licite.
Tout à fait d'accord ;) J'étais parti que la colonne qu'avait fait Saebakun :)

Re: resolu

Posté : 03 nov. 2005, 17:00
par albat
$sql="SELECY date, id from livraison where date like '%-%-2004' order by date;";
Cela dit, fais attention aux fautes de frappe,
tu risques de rencontrer un problème avec ton... SELECT ? ;)

Posté : 03 nov. 2005, 17:05
par saebakun
Corrigé

Merci :)

et bien vu ;)