MYSQL PHP SELECT DISTINC INVERSé

Résolu
shetanus -  
 shetanus -
Bonjour,

J'ai bien cherché dans les forums et trouvé des solutions... mais elle ne fonctionnent pas.

Mon probleme :

J'ai une base SQL avec les colonnes ID, PSEUDO, DATE

a chaque connexion j'insere un lien dans ma base pour des stats, ce qui donne une base du type :

1;shetanus;2007-02-23
2;teamA;2007-02-23
3;teamB;2007-02-23
4;teamA;2007-08-30
5;teamA;2007-09-01
6;teamB;2007-12-12
7;shetanus;2008-12-08
8;teamB;2008-12-20
9;shetanus;2008-12-21

AVEC LA REQUETE, SELECT id,pseudo,date FROM $table GROUP BY ip_adress, j'obtiens le résultat :
1;shetanus;2007-02-23
2;teamA;2007-02-23
3;teamB;2007-02-23

Je souhaite résupérer les valeurs les plus récentes par rapport à la date, c'est à dire :
9;shetanus;2008-12-21
8;teamB;2008-12-20
5;teamA;2007-09-01

Là, je bloque...

J'ai essayé, DISTINCT, MAX, une requete imbriquée dans une autre mais là je bloque...

Alors comme je sais que ça existe, si quelqu'un veux bien m'aider...

Merci beaucoup
Configuration: Windows Vista
Internet Explorer 7.0

7 réponses

  1. shetanus
     
    MERCI A REDLIFEBIG ET LEWIS... REPONSES 11 & 13

    GRACE A VOUS G REUSSIT, C'etait bien

    select max(id),pseudo,max(date) from table group by pseudo;

    Cela m'a permit de comprendre comment utiliser le MAX() dans SQL

    Bonne continuation les gars.
    4
  2. lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
     
    etu a essaye avec les tableaux (array)

    / /on crée la requête SQL
    $sql = 'SELECT distinct * FROM ta_table ORDER by date ASC ; //si tu veut trier par date

    // on envoie la requête
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

    // on lance la requete qui affiche les resultats suivant la condition
    while($data = mysql_fetch_array($req))
    {
    // on affiche les informations de l'enregistrement en cours
    echo '<b>'.$data['champ1'].' '.$data['champ2'].'</b> ('.$data['champ3'].')';
    // bien sur tu met les champs que tu veut
    }

    c'est une idée comme ça..
    1
    1. shetanus
       
      Merci Lewis,

      SELECT DSTINCT * me donne tous les enregistrements de la table.

      Cela ne fonctionne pas.

      C'est vraiment dure, si je trouve, je vous le dis.
      0
      1. lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352 > shetanus
         
        oui c'est normal mais apres dans un array tu doit afficher que les champs que tu a selectionné dans ta boucle while
        0
  3. redlifebig Messages postés 60 Statut Membre 23
     
    select max(id),pseudo,max(date) from table group by pseudo;

    J’ai testé et ça marche
    1
  4. lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
     
    bonjour tu a essayé avec order by...

    SELECT id,pseudo,date FROM $table ORDER BY ip_adress ASC
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. V3n1 Messages postés 270 Date d'inscription   Statut Membre Dernière intervention   56
     
    Salut,

    Je pense plutôt à :
    SELECT id, pseudo, date FROM &table ORDER BY date ASC

    Cette requète marchera juste si ton champ "date" est de type date/heure

    J'comprend pas ce que "ip_adress" vient faire ici.
    0
    1. lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
       
      oupss j'eatis pas ou trop réveillé ce matin..
      en effet je voulais mettre

      SELECT id,pseudo,date FROM $table ORDER BY date ASC...

      désolé
      0
      1. shetanus > lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention  
         
        Merci les gars,

        Pour ip_adress je me suis trompé car je travaille sur deux sites en meme temps excusez moi.
        C'est bien les valeurs id,pseudo,date dont nous parlons.

        C'est exactement ce que j'avais essayé au debut avec ORDER BY apres un GROUP BY pour dedoublonner...

        Mais le résultat c'est qu'il me retourne le tableau inversé. exemple avec ORDER BY date ASC :

        1;shetanus;2007-02-20
        2;teamA;2007-02-21
        3;teamB;2007-02-22

        exemple avec ORDER BY date DESC :

        3;teamB;2007-02-22
        2;teamA;2007-02-21
        1;shetanus;2007-02-20

        Moi j'ai plusieurs valeurs identiques dans la colonne "pseudo" car les identifiants se connectent aléatoirement, et des dates differentes.

        Je souhaite récupérer la date la plus a jour par rapport au pseudo. en gros quand il groupe les valeurs ils les groupe par ordre alphabetique, et lorsqu'il affiche les données grouppées sur ma page, c'est la date de premiere connexion qui sort et pas la derniere.

        En tout cas, merci beaucoup les gars de votre aide.

        Vous etes précieux dans ces moments là.
        0
  7. macgawel Messages postés 676 Statut Membre 89
     
    Bonjour.

    Si je comprends bien, tu veux récupérer pour chaque PSEUDO, la dernière DATE de connexion ?
    Et le MAX(DATE) ne fonctionne pas ?!

    PS : Au passage (rien à voir (?) avec le problème) : évite d'appeler ton champ DATE, ça peut engendrer des conflits...
    0
    1. shetanus
       
      Merci mac gawel, j'ai renommé la colonne date par rapport a tes conseils. renommée en visite

      avec la commande MAX date, je n'obtiens qu'une seule ligne. celle de la date la plus récente.

      Aurais tu une idée pour la syntaxe ?

      exemple

      SELECT MAX(id) FROM $table WHERE (SELECT DISTINCT pseudo FROM $table) ORDER BY visite DESC ;
      ou
      SELECT * FROM $table AS #temptable WHERE (SELECT MAX(visite) FROM #temptable GROUP BY pseudo) ORDER BY visite DESC ;

      C trop dur...

      Là je bloque.
      0
      1. macgawel Messages postés 676 Statut Membre 89 > shetanus
         
        En fait, je pensais plutôt à
        SELECT id, MAX(visite) from $table group by id;

        Qui devrait te renvoyer une ligne par ID, avec le maximum des VISITE de l'ID...
        0
  8. lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
     
    re et ça ça marche pas ?

    SELECT DISTINCT id, pseudo, date FROM &table ORDER BY date ASC
    0
    1. shetanus
       
      Merci bien,

      Cette commande sort distinctement le champ id, et comme il est unique, autant dire que c'est inutile.

      j'ai toutes les lignes du tableau qui sortent.

      Non, cela ne fonctionne pas :)
      0