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 :

Selectionner tous les champs et utliser DISTINCT [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut Selectionner tous les champs et utliser DISTINCT
    Bonjour,

    J'ai une table de 5 champs differents (id, nom, prenom, age, ecole), je voudrais selectionner tous les champs tout en distinguant les meme noms, j'utilise la requete suivante, mais il ne m'affiche pas les autres champs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $requete = 'SELECT DISTINCT nom FROM etudes'
     
    echo $id.'<br>';
    echo $nom.'<br>';
    echo $prenom.'<br>';
    echo $age.'<br>';
    echo $ecole.'<br>';
    J'obtiens juste le nom, et si je fais comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $requete = 'SELECT DISTINCT nom, prenom FROM etudes'
     
    echo $id.'<br>';
    echo $nom.'<br>';
    echo $prenom.'<br>';
    echo $age.'<br>';
    echo $ecole.'<br>';
    Il me distingue le prenom aussi, alors que je veux juste filtrer les doublons des noms.

    Merci

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Et ceci (fonctionne sous MySQL).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $requete = 'SELECT DISTINCT(nom),*.etudes FROM etudes'
    En même temps la meilleurs requêtes devrais être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $requete = 'SELECT DISTINCT(nom),prenom,age,ecole,id FROM etudes'

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Merci MaitrePylos pour la reponse, mais ca marche pas les 2 methodes

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Par défaut
    ça veut dire quoi "ça ne marche pas" ?

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Montre nous le code, qu'on puisse voir ce que tu fais!

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 346
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 346
    Billets dans le blog
    17
    Par défaut
    je veux juste filtrer les doublons des noms.
    Si tu as :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Bach, Jean-Sébastien
    Mozart, Wolfgang Amadeus
    Bach, Wilhelm Friedemann
    Quel résultat comptes-tu obtenir ?

    PS : DISTINCT ne s'applique pas à un champ mais à l'ensemble de l'enregistrement

  7. #7
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    Si tu dis que tu veux filtrer les doublons des noms, je vais en déduire que tu veux afficher seulement les gens dont le nom de famille est unique... alors cette requête devrait faire l'affaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM etudes
    group by nom
    HAVING COUNT(nom) = 1
    Dans ce cas, tous les noms de famille revenant plus qu'une fois ne seront pas affichés.

  8. #8
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Je vais donner un exemple par celui de Seb:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Bach, Jean-Sébastien
    Mozart, Wolfgang Amadeus
    Bach, Wilhelm Friedemann
    Je veux comme resultat:
    Bach
    Mozart
    avec les liens comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="lien.php">nom</a>
    Et dans une autre page, je vais appeller la requete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM table WHERE nom = $_POST['nom'];
    et j'aurais un resultat, si j'ai filtre avec le nom Bach:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Bach, Jean-Sébastien
    Bach, Wilhelm Friedemann
    Merci

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 99
    Par défaut
    Bonjour,

    Tu peux essayer de faire ca :
    dans ta première page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $sql_noms = " SELECT * FROM etudes GROUP BY nom HAVING COUNT(nom) = 1";
    $s_sql_noms = mysql_query($sql_noms);
    while($r_sql_noms = mysql_fetch_array($s_sql_noms))
    {
        echo "<br>";
        echo "<a href='page2.php?nom=".$r_sql_noms["nom"]."'>".$r_sql_noms["nom"]."</a>";
    }
    ensuite, ta page2.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $nom = $_POST["nom"];
    $requete = " SELECT * FROM etudes WHERE nom = \"".$nom."\" ";
    $s_requete = mysql_query($requete);
    if(mysql_num_rows($s_requete) > 0)
    {
        while($r_requete = mysql_fetch_array($s_requete))
        {
            echo $r_requete["nom."]." ".$r_requete["prenom"]."<br>";
        }
    }
    J'espère que ca pourra t'aider

  10. #10
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 346
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 346
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par isitien Voir le message
    Je vais donner un exemple par celui de Seb:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Bach, Jean-Sébastien
    Mozart, Wolfgang Amadeus
    Bach, Wilhelm Friedemann
    Je veux comme resultat:
    Dans ce cas un DISTINCT suffit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT nom
    FROM personnes
    Tous les enregistrements seront dédoublonnés si tu ne sélectionnes que le champ discriminant.

  11. #11
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Citation Envoyé par anthony89 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $sql_noms = " SELECT * FROM etudes GROUP BY nom HAVING COUNT(nom) = 1";
    $s_sql_noms = mysql_query($sql_noms);
    while($r_sql_noms = mysql_fetch_array($s_sql_noms))
    {
        echo "<br>";
        echo "<a href='page2.php?nom=".$r_sql_noms["nom"]."'>".$r_sql_noms["nom"]."</a>";
    }
    ensuite, ta page2.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $nom = $_POST["nom"];
    $requete = " SELECT * FROM etudes WHERE nom = \"".$nom."\" ";
    $s_requete = mysql_query($requete);
    if(mysql_num_rows($s_requete) > 0)
    {
        while($r_requete = mysql_fetch_array($s_requete))
        {
            echo $r_requete["nom."]." ".$r_requete["prenom"]."<br>";
        }
    }
    Il y a ici une légère erreur, vous devrez recevoir la variable en GET, puisque vous la mettez dans un lien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $nom = $_GET["nom"];

  12. #12
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    voila ma table:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    CREATE TABLE IF NOT EXISTS `etudes` (
      `id` int(2) NOT NULL auto_increment,
      `nom` varchar(50) collate latin1_general_ci NOT NULL,
      `prenom` varchar(50) collate latin1_general_ci NOT NULL,
      `age` bigint(2) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=7 ;
     
    --
    -- Contenu de la table `etudes`
    --
     
    INSERT INTO `etudes` (`id`, `nom`, `prenom`, `age`) VALUES
    (1, 'Jean Pierre', 'Yann', 22),
    (2, 'Ann', 'Mery', 24),
    (3, 'Melissa', 'Ruby', 20),
    (4, 'Jean Pierre', 'Cardin', 26),
    (5, 'Nielson', 'Jack', 20),
    (6, 'Jean Pierre', 'Martin', 21);
    et le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM etudes group by nom HAVING COUNT(nom) = 1
    et le resultat est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Ann Mery 24
    Melissa Ruby 20
    Nielson jack 20
    Alors il a neglige de selectionner le nom "Jean Pierre".

    J'aimerais avoir comme suite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Ann Mery 24
    Melissa Ruby 20
    Nielson jack 20
    Jean Pierre

  13. #13
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Normal que Jean Pierre n'y figure pas puisqu'il y a deux lignes pour ce nom et que tu ne retiens que les nom à une seule ligne !

    Si tu ne fais ton GROUP BY que sur la colonne nom, les autres colonnes du SELECT ne faisant pas l'objet d'une fonction d'agrégation retourneront une valeur aléatoire s'il y a plus d'une ligne pour le nom (cas de Jean Pierre).

    Qu'est-ce qui détermine quelle valeur privilégier entre Yann et Martin et entre 22 et 21 ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  14. #14
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Et en suppriment juste ceci :HAVING COUNT(nom) = 1
    C'est à dire :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id, nom, prenom, age
    FROM etudes
    GROUP BY nom
    Ca donne quoi ?
    Théoriquement c'est le 1er "Jean Pierre" qui sera récupéré, soit : 1, 'Jean Pierre', 'Yann', 22

  15. #15
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Oui, theoriquement ca va un seul en inserant le prenom devant.

    Merci pour votre aide

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

Discussions similaires

  1. [Oracle] Requête qui sélectionne tous les champs d'une table et un champ d'une autre table
    Par roswina dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/06/2015, 13h34
  2. [AC-2007] selectionner tous les champs d'une table sauf un seul
    Par Bonero dans le forum Access
    Réponses: 2
    Dernier message: 08/06/2011, 17h54
  3. Récupérer tous les champs avec un DISTINCT
    Par Le Mérovingien dans le forum Requêtes
    Réponses: 3
    Dernier message: 04/11/2005, 23h58
  4. afficher tous les champs d'une table
    Par julio84 dans le forum ASP
    Réponses: 8
    Dernier message: 19/01/2005, 10h31
  5. selectionner tous les champs sauf un ?
    Par HULK dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/01/2005, 15h51

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