Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/11/2010, 07h29   #1
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
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 :
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 :
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
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 07h48   #2
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 167
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 167
Points : 6 451
Points : 6 451
Et ceci (fonctionne sous MySQL).

Code :
1
2
 
$requete = 'SELECT DISTINCT(nom),*.etudes FROM etudes'
En même temps la meilleurs requêtes devrais être

Code :
1
2
 
$requete = 'SELECT DISTINCT(nom),prenom,age,ecole,id FROM etudes'
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 11h46   #3
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
Merci MaitrePylos pour la reponse, mais ca marche pas les 2 methodes
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 14h38   #4
Membre éclairé
 
Inscription : octobre 2004
Messages : 235
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 235
Points : 360
Points : 360
ça veut dire quoi "ça ne marche pas" ?
Joker-eph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 14h56   #5
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 167
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 167
Points : 6 451
Points : 6 451
Montre nous le code, qu'on puisse voir ce que tu fais!
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 20h00   #6
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 815
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 815
Points : 3 440
Points : 3 440
Citation:
je veux juste filtrer les doublons des noms.
Si tu as :

Code :
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
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 20h27   #7
Membre actif
 
Tobbi Filteau
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Tobbi Filteau

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 177
Points : 177
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 :
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.
osuwariboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 03h47   #8
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
Je vais donner un exemple par celui de Seb:

Code :
1
2
3
4
 
Bach, Jean-Sébastien
Mozart, Wolfgang Amadeus
Bach, Wilhelm Friedemann
Je veux comme resultat:
Citation:
Bach
Mozart
avec les liens comme ca:

Code :
<a href="lien.php">nom</a>
Et dans une autre page, je vais appeller la requete:

Code :
SELECT * FROM table WHERE nom = $_POST['nom'];
et j'aurais un resultat, si j'ai filtre avec le nom Bach:
Code :
1
2
3
 
Bach, Jean-Sébastien
Bach, Wilhelm Friedemann
Merci
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 08h50   #9
Membre régulier
 
Inscription : avril 2009
Messages : 83
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 83
Points : 96
Points : 96
Bonjour,

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

Code :
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 :
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
anthony89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 09h19   #10
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 815
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 815
Points : 3 440
Points : 3 440
Citation:
Envoyé par isitien Voir le message
Je vais donner un exemple par celui de Seb:

Code :
1
2
3
Bach, Jean-Sébastien
Mozart, Wolfgang Amadeus
Bach, Wilhelm Friedemann
Je veux comme resultat:
Dans ce cas un DISTINCT suffit :

Code :
1
2
SELECT DISTINCT nom
FROM personnes
Tous les enregistrements seront dédoublonnés si tu ne sélectionnes que le champ discriminant.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 14h54   #11
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 167
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 167
Points : 6 451
Points : 6 451
Citation:
Envoyé par anthony89 Voir le message
Code :
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 :
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 :
1
2
 
$nom = $_GET["nom"];
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2010, 03h10   #12
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
voila ma table:

Code :
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 :
1
2
 
SELECT * FROM etudes group by nom HAVING COUNT(nom) = 1
et le resultat est:

Code :
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 :
1
2
3
4
Ann Mery 24
Melissa Ruby 20
Nielson jack 20
Jean Pierre
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2010, 13h45   #13
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 957
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 957
Points : 18 165
Points : 18 165
Envoyer un message via MSN à CinePhil
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2010, 14h20   #14
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 695
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 695
Points : 3 262
Points : 3 262
Salut

Et en suppriment juste ceci :HAVING COUNT(nom) = 1
C'est à dire :
Code sql :
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
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 10h56   #15
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
Oui, theoriquement ca va un seul en inserant le prenom devant.

Merci pour votre aide
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h49.


 
 
 
 
Partenaires

Hébergement Web