filtrage sur date...

Eléphant du PHP | 226 Messages

30 juin 2008, 14:43

Bonjour,

J'ai cette requête :
$select = "SELECT * FROM table WHERE idapp= '".$idApp."' ORDER BY DateRuptureContrat DESC";
Dans la table concernée, j'ai cette structure:

Code : Tout sélectionner

CREATE TABLE `suiviapprentis` ( `DateDebutContrat` varchar(10) NOT NULL default '', `DateFinContrat` varchar(10) NOT NULL default '', `DateRuptureContrat` varchar(10) NOT NULL default '', `MotifRupture` varchar(50) NOT NULL default '', ... ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
les enregistrements:

Code : Tout sélectionner

('01/06/2008', '30/06/2008', '15/06/2008', 'Rupture amiable', '0', 352, 'BAC PRO COMMERCE', '1ere annee', 82, '', 2, ''), ('', '', '10/07/2008', '', '0', 352, '', '', 0, '', 2, 'sans activite'), ('01/06/2008', '30/06/2008', '20/06/2008', 'Rupture amiable', '0', 352, 'BTS MANAGEMENT DES UNITES COMMERCIALES', '1ere annee', 5, '', 2, '');
Ce que je ne comprends pas, c'est pourquoi l'enregistrement comportant la date '10/07/2008', donc la plus récente, n'apparaît pas en premier... Si en revanche, je la modifie pour écrire par exemple 25/06/2008, cette ligne s'affichera bien avant les autres...
merci,
«Le matin, quand il t’en coûte de te réveiller, que cette pensée te soit présente: c’est pour faire œuvre d’homme que je m’éveille.»
Marc Aurèle.

Mammouth du PHP | 1353 Messages

30 juin 2008, 14:47

Le probleme c'est que tes dates ne sont pas considérées comme des dates mais comme des varchar(10) (des chaines de caractères).

Hors quand un programme compare une chaine de caractère il s'arrete dès qu'il trouve un caractère supérieur à l'autre, donc de meme que dans l'ordre décroissant on a

BBBZ
BBBA

bah avec les chiffres d'une date il fera

20/01/01
10/07/08

car le 2 est supérieur au 1...

ou encore

22/03/02 (supérieur à)
22/01/08

il faudrait avoir des champs de type "date" pour avoir une comparaison pertinente.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphant du PHP | 67 Messages

30 juin 2008, 15:16

Au pire si tu tiend vraiment à ton type VARCHAR tu écrit la date à l'envers dans ta BDD (AAAA/MM/JJ) la comparaison fonctionnera (2001/01/20 < 2008/07/10 pour l'ex de guilt92) mais bon c'est un peu tiré par les dread locks :twisted: