Tri décroissant, fonctions sort() / rsort() ne fonctionnent pas [Résolu]

payetonju 437 Messages postés mercredi 26 septembre 2007Date d'inscription 2 juillet 2014 Dernière intervention - 16 mars 2010 à 15:25 - Dernière réponse : payetonju 437 Messages postés mercredi 26 septembre 2007Date d'inscription 2 juillet 2014 Dernière intervention
- 18 mars 2010 à 09:23
Bonjour,

J'ai un léger souci, je voudrais afficher uniquement les 4 derniers utilisateurs inscrits sur mon site, mais je ne vosi pas trop comment faire, car que j'utilise sort() ou rsort(), ça me renvoi toujours le même tri.

Voici mon code, si quelqu'un peut m'aider :

$sql = "select LOGIN,DATE_INSCRIPTION from utilisateurs ";
$res = mysql_query($sql);
while( $data = mysql_fetch_assoc($res) )
{
  $DateAjout = $data['DATE_INSCRIPTION'];
  $LogAjout = $data['LOGIN'];

  $Inscris = array($DateAjout);
  rsort($Inscris);
  foreach ($Inscris as $key => $val)
  {
    echo "Inscrit : [" . $key . "] = " . $val . "\n";
  }
}


Merci d'avance
Afficher la suite 

Votre réponse

18 réponses

Meilleure réponse
Tonio_35 567 Messages postés mercredi 4 octobre 2006Date d'inscription 30 août 2011 Dernière intervention - 17 mars 2010 à 12:03
3
Merci
Essai un

SELECT login, date_inscription, STR_TO_DATE(date_inscription, '%d/%m/%Y - %H:%i:%s') AS insdate FROM utilisateurs ORDER BY insdate DESC LIMIT 0,4


Pour plus de détail sur STR_TO_DATE de MYSQL : ICI
Pour plus de détail sur le format de date (%i%s...) : ICI

Celas-dis, le mieux est que tu te fasse un script php ou mysql pour convertir les données de ta base... Parce-que des formats standard c'est vraiment plus facile (Si tu veux faire des calculs par exemple : Inscrit il y a X jours).

Tu peux passer un script du genre :
UPDATE "utilisateurs" SET date_inscription = STR_TO_DATE(date_inscription, '%d/%m/%Y - %H:%i:%s');

Et convertir ta colonne en type date. Ou passer par une colonne temporaire le temps de modifer ton code PHP :
ALTER TABLE "utilisateurs" ADD new_date_ins DATETIME;
UPDATE "utilisateurs" SET new_date_ins = STR_TO_DATE(date_inscription, '%d/%m/%Y - %H:%i:%s');



_________________________________
Min iPomme

Merci Tonio_35 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de Tonio_35
Meilleure réponse
Tonio_35 567 Messages postés mercredi 4 octobre 2006Date d'inscription 30 août 2011 Dernière intervention - 17 mars 2010 à 16:17
3
Merci
C'est sensible à la casse :
Si tu fais :
"SELECT login, date_inscription,...


$DateAjout = $data['date_inscription'];
$LogAjout = $data['login'];


Si tu fais
"SELECT LOGIN, DATE_INSCRIPTION,...


$DateAjout = $data['DATE_INSCRIPTION'];
$LogAjout = $data['LOGIN'];


Niveau "normalisation le premier choix avec le nom des tables en minuscule est mieux... Mais tu fais comme tu veux.

_________________________________
Min iPomme

Merci Tonio_35 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de Tonio_35
Tonio_35 567 Messages postés mercredi 4 octobre 2006Date d'inscription 30 août 2011 Dernière intervention - 16 mars 2010 à 15:37
0
Merci
Bonjour,

A quel format est ta date ?

Si c'est un timestamp tu peux utiliser un ORDER BY dans ta requête SQL. Avec la date ou les ID d'ailleurs...


_________________________________
Min iPomme
Commenter la réponse de Tonio_35
cs_47 197 Messages postés mardi 20 janvier 2004Date d'inscription 20 février 2013 Dernière intervention - 16 mars 2010 à 15:39
0
Merci
Bonjour,

s'il s'agit de juste afficher les 4 derniers utilisateurs inscrits, pourquoi ne pas le demander à la base de données directement?

du type:
select LOGIN,DATE_INSCRIPTION
from utilisateurs
order by DATE_INSCRIPTION desc
limit 0,4


bonne après midi
Commenter la réponse de cs_47
Tonio_35 567 Messages postés mercredi 4 octobre 2006Date d'inscription 30 août 2011 Dernière intervention - 16 mars 2010 à 15:52
0
Merci
Au passage :

$sql = "select LOGIN,DATE_INSCRIPTION from utilisateurs ";

Normalement la norme veux qu'on mette les mot clé SQL en MAJUSCULE et le reste en minuscule.
$sql = "SELECT login, date_inscription FROM utilisateurs";


Tu n'as pas du bien comprendre le principe de ton while. Immaginons que tu ai les données suivantes :

login | date_inscription
toto  | 20100306
titi  | 20100301
tutu  | 20100101


quand tu va faire ton while, au premier passage :
$DateAjout va avoir la valeur "20100306" et $LogAjout la valeur "toto".

Ensuite tu fais $Inscris = array($DateAjout);
$Inscris auras la valeur array("20100306").
Puis tu fais
rsort($Inscris);
Donc ici tu trie un tableau d'un élèment. Il seras toujours dans l'ordre .

Pour finir tu fais ton foreach
Ca va te retourner qu'une ligne
echo "Inscrit : [" . $key . "] = " . $val . "\n";

retourneras
Inscrit : [0] = "20100306".

Puis tu repasse dans ton while une seconde fois ce qui au final t'écriras :
Inscrit : [0] = "20100301".





_________________________________
Min iPomme
Commenter la réponse de Tonio_35
payetonju 437 Messages postés mercredi 26 septembre 2007Date d'inscription 2 juillet 2014 Dernière intervention - 17 mars 2010 à 09:33
0
Merci
Bonjour et merci pour vos réponses.
ma date est sous ce format la : 06/02/2010 - 03:56:27
(varchar)
je ne peux donc pas faire d'order by, il prend les 2 premiers chiffres uniquement pour le tri. je viens de me rendre compte que j'aurais du faire sous forme yyyymmdd mais j'ai fait tout mon site comme ça c'est un peu tard, donc j'aimerais trouver une solution pour éviter de perdre plusieurs jours à tout recommencer.

MErci pour la précision Tonio, j'ai un peu de mal avec les notions de tableau. J'ai compris mon erreur à ce niveau là, mais alors, comment puis-je les trier sachant que je ne peux aps faire de ORDER BY ni trier avec la fonction sort() ?

Merci
Commenter la réponse de payetonju
payetonju 437 Messages postés mercredi 26 septembre 2007Date d'inscription 2 juillet 2014 Dernière intervention - 17 mars 2010 à 14:45
0
Merci
convertir mes colonnes de ma table ? arf non car j'ai une dizaine de table où il y a un champs de ce type et où le format est le même ça voudrait dire qu'il faut que je change plein de choses dans mes includes (entre autres) qui sont programmés en fonction de ce format là. J'ai mal commencé mais j'avoue ne pas avoir envie de refaire tout cela.

C'est pourquoi il me faut une alternative, dont j'ai besoin uniquement dans ce cas là.

sinon j'ai essayé ta requete, et ça me donne ceci comme erreur, comme si les chamsp n'existaient pas :
Notice: Undefined index: DATE_INSCRIPTION in /homepages/12/d311644604/htdocs/payetonju/www/index.php  on line 204

Notice: Undefined index: LOGIN in /homepages/12/d311644604/htdocs/payetonju/www/index.php on line 205

voici ma requete :

$sql =  " SELECT login, date_inscription, STR_TO_DATE(DATE_INSCRIPTION, '%d/%m/%Y - %H:%i:%s') AS insdate FROM utilisateurs ORDER BY insdate DESC LIMIT 0,4";
$res = mysql_query($sql) or die('Erreur SQL ! 
" '.$sql.' 
'.mysql_error());
while( $data  = mysql_fetch_assoc($res) )
{
  echo "- ".$LogAjout." inscrit(e) le ".$DateAjout."
";
}


Merci bcp tonio
Commenter la réponse de payetonju
Tonio_35 567 Messages postés mercredi 4 octobre 2006Date d'inscription 30 août 2011 Dernière intervention - 17 mars 2010 à 15:14
0
Merci
C'est quoi tes lignes 204 et 205 de ton fichier index.php ?
Sinon tu ne fais pas bien ton mysql_fetch_assoc...
ton while( $data = mysql_fetch_assoc($res) )
va mettre pour chaque ligne dans ta variable $data un tableau avec toutes les colonnes récupérées dans ton SELECT...
La tu te sert de la variable $LogAjout et $DateAjout alors que tu ne les à jamais créées.

il faut se servir de $data['Nom de ta colonne désirée']...

Plus de détails ICI => LAAAAA <=
_________________________________
Min iPomme
Commenter la réponse de Tonio_35
payetonju 437 Messages postés mercredi 26 septembre 2007Date d'inscription 2 juillet 2014 Dernière intervention - 17 mars 2010 à 15:22
0
Merci
pardon j'ai oublié dans mon copié collé :
$DateAjout = $data['DATE_INSCRIPTION'];
$LogAjout = $data['LOGIN'];
Commenter la réponse de payetonju
payetonju 437 Messages postés mercredi 26 septembre 2007Date d'inscription 2 juillet 2014 Dernière intervention - 17 mars 2010 à 15:24
0
Merci
ce sont justement mes lignes 204 et 205
Commenter la réponse de payetonju
payetonju 437 Messages postés mercredi 26 septembre 2007Date d'inscription 2 juillet 2014 Dernière intervention - 17 mars 2010 à 16:35
0
Merci
Carrément ça marche niquel chrome !!! MERCIIIIIIIIII
Bon maintenant que ça marche il faut que je pige comment ça marche en me documentant !
De plus, je ne savais pas que la requete SQL était sensible à la case.
Et l'ingénieur réseau qui s'occupe de moi dans la société dans laquelle je travaille m'a toujours dit de mettre tout en minuscule dans ma requete sauf les noms de colonne, pourquoi tant d'avis différents ? (ce n'est pas un ingénieur web)
Commenter la réponse de payetonju
Tonio_35 567 Messages postés mercredi 4 octobre 2006Date d'inscription 30 août 2011 Dernière intervention - 17 mars 2010 à 19:09
0
Merci
Et bien disons que ton ingénieur réseau est un ingénieur réseau...

La plus part du temps (pour ne pas dire tout le temps) tu verras les requêtes SQL comme je te l'ai montré. C'est une convention. Après c'est comme tu veux. Le principal c'est de différencier les mots clé du reste... c'est juste pour faciliter la lecture...

_________________________________
Min iPomme
Commenter la réponse de Tonio_35
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 17 mars 2010 à 23:39
0
Merci
Salut,

Juste un passage pour enfoncer le clou sur ça :
convertir mes colonnes de ma table ? arf non car j'ai une dizaine de table où il y a un champs de ce type et où le format est le même ça voudrait dire qu'il faut que je change plein de choses dans mes includes (entre autres) qui sont programmés en fonction de ce format là. J'ai mal commencé mais j'avoue ne pas avoir envie de refaire tout cela.

J'entends bien que tu ne souhaites pas passer du temps à tout refaire, mais tu devrais pourtant !!
Ne pas le faire tout de suite est clairement reculer pour mieux sauter, surtout que ton site n'est pas un petit site amateur (si toutefois il s'agit de celui de ton profil)
Sans procéder à la modification :
Tu vas surcharger inutilement ton serveur en utilisant des fonctions mySQL qui n'ont pas lieu d'être dans ce cas, et sans doute compenser par du code PHP inutile lui aussi.
Tu dis ne pas en avoir besoin maintenant, mais demain ??
Même si tu es retissant tu devrais au moins évaluer la charge de travail. Côté mySQL la modif ne prends que qq minutes, reste à voir côté PHP ...

ATTENTION : tu as de graves problèmes de sécurité sur ton site !!!
Je n'en dis pas plus ici et t'adresse un MP


Cordialement,


Kohntark -
Commenter la réponse de kohntark
payetonju 437 Messages postés mercredi 26 septembre 2007Date d'inscription 2 juillet 2014 Dernière intervention - 18 mars 2010 à 09:06
0
Merci
Bah en fait c'est pas pour ce site là, c'est pour mon site perso, dans mon profil c'est mon site pro, mais je ne savais pas que j'avais des problemes de sécurité :(
Commenter la réponse de payetonju
Tonio_35 567 Messages postés mercredi 4 octobre 2006Date d'inscription 30 août 2011 Dernière intervention - 18 mars 2010 à 09:12
0
Merci
Mais quel curieux ce kohntark... Et quelle bienveillance...

_________________________________
Min iPomme
Commenter la réponse de Tonio_35
payetonju 437 Messages postés mercredi 26 septembre 2007Date d'inscription 2 juillet 2014 Dernière intervention - 18 mars 2010 à 09:15
0
Merci
bah heureusement qu'il est là ! moi qui n'y connais rien en failles ça m'interresserait d'en savoir plus, j'ai appris à Dev sur le tas, par moi meme lol alors si j'ai de telles lacunes ça ne m'etonne pas lol
Commenter la réponse de payetonju
Tonio_35 567 Messages postés mercredi 4 octobre 2006Date d'inscription 30 août 2011 Dernière intervention - 18 mars 2010 à 09:22
0
Merci
Disons que ce genre de "lacunes" vont certainement se transformer en points fort. C'est en faisant des erreurs que l'on progresse. Et surtout que l'on oublie moins ce que l'on a appris.


_________________________________
Min iPomme
Commenter la réponse de Tonio_35
payetonju 437 Messages postés mercredi 26 septembre 2007Date d'inscription 2 juillet 2014 Dernière intervention - 18 mars 2010 à 09:23
0
Merci
Oui c'est vrai ! Mais je dirais surtout merci Codes Sources xD
Commenter la réponse de payetonju

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.