ORDER BY (problème)

Invité
Invité n'ayant pas de compte PHPfrance

07 avr. 2007, 16:07

Bonjour,

j'ai un petit problème concernant un ORDER BY DESC, les dates ne sont pas mises dans le bonne ordre :cry:

Par exemple :
29-03-07 a 08:53
29-03-07 a 07:08
27-03-07 a 23:10
06-04-07 a 22:12
05-03-07 a 14:00
05-03-07 a 14:00
05-03-07 a 14:00
Là,le 06 avril ce place après le 5 mars mais avant le 29 mars ?????.

Apparemment,il suit l'ordre des chiffres du jour et non de la date complete...?

Pourtant,ma requete est :
$mpo = mysql_query("SELECT dc FROM cadeauc ORDER BY dc DESC LIMIT 0,10") or die ('Erreur : '.mysql_error());
.

Donc,le 06 avril devrait être en première position pourtant ?

Merci de vos réponses et surtout de votre aide :wink:

Mammouth du PHP | 19672 Messages

07 avr. 2007, 16:09

Ton champ est-il bien de type DATE ou DATETIME ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 177 Messages

07 avr. 2007, 16:14

Je dirais que tu deverais séparer la date et l'heure dans ta table, la date n'a rien avoir avec l'heure, je veux dire que ce sont deux info indépendante l'une de l'autre.

Invité
Invité n'ayant pas de compte PHPfrance

07 avr. 2007, 16:41

Mon champ n'etait pas en datetime :(

Et de plus,maintenant,pour mettre la date à l'endroit,j'ai une erreur car je met les résultats dans un tableau :
echo'<tr><td>date('d-m-Y H:i:s', strtotime($donnees['dc']))</td><td>'.$donnees['pseudo'].'</td><td>'.$donnees['cadeau'].'</td></tr>';
Merci de votre aide :wink:

ps: l'erreur se situe a cause de ca :
date('d-m-Y H:i:s', strtotime($donnees['dc']))

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

07 avr. 2007, 18:44

Je dirais que tu deverais séparer la date et l'heure dans ta table, la date n'a rien avoir avec l'heure, je veux dire que ce sont deux info indépendante l'une de l'autre.
Je ne suis pas d'accord, une heure est liée à une date.

Il y a encore un post tout récent qui montre que c'est plus pratique de regrouper les deux : si tu veux sélectionner les lignes qui correspondent à la dernière demie-heure, tu as un super fonction qui fait ça : SUBTIME()

Ah oui mais si tu as séparé date et heure, ça devient compliqué si SUBTIME() renvoie sur le jour précédent ;)
j'ai une erreur
[...]
ps: l'erreur se situe a cause de ca :
date('d-m-Y H:i:s', strtotime($donnees['dc']))
Merci pour l'indice, mais c'est quoi l'erreur exactement ? :roll:

Est-ce que tu as passé ta colonne en DATETIME ? C'est la première chose à faire, pour avoir des possibilités de tri/calcul simples. Toute parade ne sera que du bricolage contreperformant qui te posera forcément d'autres problèmes un jour.

Invité
Invité n'ayant pas de compte PHPfrance

07 avr. 2007, 19:28

Re,

mon erreur :
Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in /home/.filer2/www/classement.php on line 143
Et à la ligne 143 :
 echo'<tr><td>date('d-m-Y H:i:s', strtotime($donnees['dc']))</td><td>'.$donnees['pseudo'].'</td><td>'.$donnees['cadeau'].'</td></tr>';
merci

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

07 avr. 2007, 19:54

C'est jamais très bon d'imbriquer plusieurs fonctions, dans un affichage. Fais tes appels en plusieurs étapes, en stockant avec des variables, et ce sera plus facile pour débugger. Parceque là c'est une bête erreur de syntaxe qui doit se trouver facilement.

Mammouth du PHP | 19672 Messages

08 avr. 2007, 09:20

 echo'<tr><td>date('d-m-Y H:i:s', strtotime($donnees['dc']))</td><td>'.$donnees['pseudo'].'</td><td>'.$donnees['cadeau'].'</td></tr>';
Tu as un conflit d'apostrophes : celles encadrant les chaines de caractères et celles encadrant les index de tableau : alterne apostrophes et guillemets selon le cas, et mets ça en forme de façon plus lisible, ce sera plus facile à suivre, par exemple :
 echo "  <tr>\n";
echo "    <td>". date('d-m-Y H:i:s', strtotime($donnees['dc'])) ."</td>\n";
echo "    <td>". $donnees['pseudo'] ."</td>\n";
echo "    <td>". $donnees['cadeau'] ."</td>\n";
echo "  </tr>\n";
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 170 Messages

08 avr. 2007, 09:29

Mon champ n'etait pas en datetime
Mes petits camarades t'on dit de mettre ton champ en DATETIME.

Maintenant, avant de poursuivre, tu vas nous montrer comment, et surtout sous quelle forme, tu entrais tes données date dans ta table.

Parce que mettre un DATETIME sur des données au format varchar, ça va pas le faire du tout. :wink:
Benjamin Franklin a dit :
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends

Invité
Invité n'ayant pas de compte PHPfrance

08 avr. 2007, 11:49

Merci des ces précisions ouckileou. Je ne connaissais pas cette subtilitée.
Je dirais par contre qu'elle est lier a l'utilisation de SUBTIME(), ou dans l'optique de récuperer simplement une heures recente dans le bon jour ^^.
Mais il n'y a , je pense aucune raison que ce format de date+heure ne soit pas compatible avec un ORDERBY.
Pour le reste Expreg résume bien la situation.