Problème sur un order by date

Eléphant du PHP | 119 Messages

02 nov. 2005, 15:38

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

Eléphant du PHP | 440 Messages

02 nov. 2005, 15:43

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 !

Avatar du membre
ViPHP
ViPHP | 3008 Messages

02 nov. 2005, 15:43

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

Eléphant du PHP | 119 Messages

02 nov. 2005, 15:59

Je n'arrive pas à changer le type de ma collonne il me dit

column date cannot be cast to type date

Avatar du membre
ViPHP
ViPHP | 3008 Messages

02 nov. 2005, 16:05

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

Eléphant du PHP | 153 Messages

02 nov. 2005, 16:09

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

Eléphant du PHP | 119 Messages

03 nov. 2005, 16:19

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.
Modifié en dernier par saebakun le 03 nov. 2005, 17:05, modifié 1 fois.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

03 nov. 2005, 16:28

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à...

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

03 nov. 2005, 16:32

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... ;)

Eléphant du PHP | 119 Messages

03 nov. 2005, 16:37

Attention j'ai une collonne "date" avec le mauvais format et une colonne "dates" en bon format :)

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

03 nov. 2005, 16:42

Oui. En fait, je répondais à Charabia.
Le nom dates est licite.

Eléphant du PHP | 119 Messages

03 nov. 2005, 16:46

oui on est d'accord :)

et bien merci pour les coups de mains :D

Avatar du membre
ViPHP
ViPHP | 3008 Messages

03 nov. 2005, 16:56

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 :)

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

03 nov. 2005, 17:00

$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 ? ;)

Eléphant du PHP | 119 Messages

03 nov. 2005, 17:05

Corrigé

Merci :)

et bien vu ;)