Sommaire Contacts Documents Sites Forums
S'identifier | Besoin d'aide ? | 78 connectés sur le site | 11ème année

Forums médicaux
Forum technique

www.remede.org
 

Explications sur le magnifique bug du jour !

Bertrand B.
Gentil Administrateur


Messages : 5968
Enregistré : 15/12/2000

Vie réelle
Bertrand Boutillier - 32 ans
Pays : France
Domaine : Médecine
Niveau : Médecin généraliste
Fac : RENNES
Posté le 09/09/2001 à 16:28
Que c’est il passé ce jour ?

Tout d’abord il faut savoir qu’en matière informatique, la facon la plus pratique pour stocker une date est de stocker le nombre de secondes qui c’est écoulé entre cette date et un point 0. Le 0 est défini au 1er janvier 1970.
C’est donc comme ca que sont stockée toutes les dates sur le forum.
Ainsi a l’instant ou j’écris ce message la date est 1000043560 …
(A noter que pour faire une comparaison mathématiques de dates, il est plus simple de comparer 2 nombres que des données du type 09/08/2001 15h56)
Que remarquez vous ? et bien que l’on a tout récemment dépassé 1000000000 …

2ieme facteur intervenant ce jour :
Dans un dossier sous windows, créez 3 fichiers nommés 1.txt 2.txt et 12.txt … Demandez ensuite à windows de les réorganiser par nom … windows va les aligner dans cet ordre : 1.txt 12.txt 2.txt
Pourquoi ? parce qu’il interprète les noms des fichiers comme du texte et pas comme des nombres.

Bien bien …
Maintenant vous allez créer un fichier 1000000000.txt et un fichier 999999999.txt … quel nombre est le plus grand ? Celui qui commence par 1 … comment windows va classer ces fichiers ? d’abord 1000000000.txt puis
999999999.txt et pas l’inverse, toujours car il considère ces nombres comme du texte.

Si vous avez suivi jusque là et bien la suite est simple :
Les données contenant les dates des messages sur le forum étaient stockées dans des champs textes (erreur de conception du forum primitif !). Moralité, les dates étaient triées comme du texte et pas comme des nombres ! Donc quand ce jour le nombre indiquant la date a augmenté d’un chiffre, toutes les règles de tri sont parties à l’eau …

Voilà l’explication simplifié.

Pour les pros, voilà le détail

En fait le tri sur la page du forum se fait via une colonne mysql intitulée lastpost. Le SELECT est donc de la forme « order by lastpost desc »
Le problème c’est que cette colonne est un varchar qui contient plusieurs données séparées par un |
(timestamp|auteur|ect) donc pas question de transformer cette colonne en intégral ! j’ai donc remplacé
« order by lastpost desc » par « (SUBSTRING_INDEX(lastpost, '|', 1)+1) desc »
On récupère ainsi la première partie de lastpost, on lui ajoute +1 pour que ca soit interprété comme une valeur numérique et c’est sur cette valeur finale qu’on fait le tri …
———
www.remede.org | www.anatomie-humaine.com | www.tronches-de-net.com | www.medipromo.com
www.experiences-inoubliables.com | www.experiences-desagreables.com | www.insolite.org | encore ? ;-)
Nous sommes des milliers, un fleuve extraordinaire. Notre force est sublime, elle emportera tout. Et s'ils essaient encore ils se frotteront à mille coeurs debout
Top