IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] supprimer de manière "ordonnée" les doublons


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Par défaut [SQL] supprimer de manière "ordonnée" les doublons
    Bonjour,

    J'ai une requête qui affiche une boucle :

    Mais il y a souvent des doublons :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    132 - index.html - 10.12.2007
    132 - index.html - 9.12.2007
    132 - index.html - 8.12.2007
    127 - index.html - 20.12.2007
    127 - index.html - 10.12.2007
    J'aimerais n'afficher qu'une seule ligne par IP mais que ce soit la plus récente. J'ai bien essayé avec DISTINCT et GROUP BY mais je n'arrive pas à ordonner mon résultat.

    Est ce que quelqu'un peut m'aider ?

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 92
    Par défaut
    Salut,

    J'imagine que tu as déjà essayé avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT ip, url, date FROM ... WHERE ... GROUP BY ip, url ORDER BY ip, date DESC;
    Envois une description de tes champs (typage notamment).

  3. #3
    Membre éprouvé Avatar de IllusionStriker
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 129
    Par défaut
    salut,
    ta requete aussi pourrait nous aidé!
    mais pour ce que tu veux faire c'est bien l'utilisation du distinct qu'il te faut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select distinct (ip)......
    ciao

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Par défaut
    Bonsoir.

    Voici ma requête actuelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $connect = 'SELECT * FROM cpg1410_map ORDER BY datetime DESC';
    Voici ce que cela me retourne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    38.99*** - /displayimage.php?pos=-3467 - 1202407810
    66.249*** - /displayimage.php?album=random&cat=0&pos=-20842 - 1202407787
    38.99*** - /displayimage.php?album=276&pos=4 - 1202407699
    66.249*** - /displayimage.php?album=379&pos=156 - 1202407680
    38.99*** - /displayimage.php?pos=-15406 - 1202407643
    38.99*** - /thumbnails.php?album=357&page=4 - 1202407621
    38.99*** - /displayimage.php?album=440&pos=45 - 1202407582
    La liste doit être triée par time descendant.
    J'aimerais que ma liste ne comporte qu'une ligne par IP, l'enregistrement le plus récent. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    38.99*** - /displayimage.php?pos=-3467 - 1202407810
    66.249*** - /displayimage.php?album=random&cat=0&pos=-20842 - 1202407787
    Avec GROUP BY ça fonctionne mais il ne me prend que les anciens enregistrements...

    Avec DISTINCT ça bug, visiblement on peut pas faire un SELECT *, on ne doit prendre qu'une colonne.

  5. #5
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 92
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT ip, url, datetime FROM cpg1410_map GROUP BY ip, url ORDER BY ip ASC, datetime DESC;
    As-tu essayé ?

    ps: Fuis comme la peste le SELECT *. Il faut toujours nommer explicitement les champs que l'on souhaite sélectionner et les préfixer avec le nom de la table (si jointures).

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Par défaut
    Merci du conseil.
    J'ai essayé ta requête. C'est mieux mais il manque un détail. Il y a toujours plusieurs sorties pour un ip. Exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    38.99*** - /displayimage.php?pos=-3467 - 1202407810
    38.99*** - /displayimage.php?pos=-15406 - 1202407643
    38.99*** - /thumbnails.php?album=357&page=4 - 1202407621
    38.99*** - /displayimage.php?album=440&pos=45 - 1202407582
    1202407787
    38.99*** - /displayimage.php?album=276&pos=4 - 1202407699
    66.249*** - /displayimage.php?album=random&cat=0&pos=-20842 - 
    66.249*** - /displayimage.php?album=379&pos=156 - 1202407680
    les ip sont maintenant regroupés et triés par date descendante. Mais j'aimerais n'avoir que le dernier enregistrement pour chaque ip.

  7. #7
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 92
    Par défaut
    Et ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ip, url, MAX(datetime) AS max_datetime FROM cpg1410_map GROUP BY ip HAVING datetime=max_datetime ORDER BY ip;
    Good ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] Je n'arrive pas a effacer les doublons
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/09/2007, 17h39
  2. sql dynamic : passage de parametre entre quotes
    Par de LANFRANCHI dans le forum SQL
    Réponses: 12
    Dernier message: 26/05/2004, 15h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo