Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes 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 26/09/2011, 13h11   #1
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
Par défaut Liste unique de pays inscrits

Bonjour,

j'ai des membres inscrit sur mon site et ils viennent de différents pays.

j'aurais besoin d'avoir liste unique de chaque pays.

Pour cela, j'ai exécuté la requête suivante :

Code :
1
2
3
4
5
6
SELECT DISTINCT A.id_pay, A.pays_".$lang.", A.id_con,  B.id_vil, B.id_pay, B.ville_fr, D.cont_".$lang.", E.id_vil
FROM flatforswap_pays A
INNER JOIN flatforswap_ville B ON A.id_pay = B.id_pay
INNER JOIN flatforswap_continent D ON D.id_con = A.id_con
INNER JOIN flatforswap_adherent E ON E.id_vil = B.id_vil
WHERE E.valide ='2';
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 13h29   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
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 : 11 029
Points : 18 324
Points : 18 324
Envoyer un message via MSN à CinePhil
Citation:
j'aurais besoin d'avoir liste unique de chaque pays.
DISTINCT opère sur toute la ligne du SELECT donc tu as autant de fois un pays que de villes de ce pays.

Est-ce qu'en supprimant tout ce qui ne concerne pas le pays ça répond à ton besoin ?
Code :
1
2
3
4
5
SELECT DISTINCT A.id_pay, A.pays_".$lang."
FROM flatforswap_pays A
INNER JOIN flatforswap_ville B ON A.id_pay = B.id_pay
    INNER JOIN flatforswap_adherent E ON E.id_vil = B.id_vil
WHERE E.valide = 2
Citation:
je ne vois pas apparaître pays-bas, Malaisie (alors que ce sont des pays qui devraient apparaître...)
Ils devraient apparaître parce que tu as effectivement des membres inscrits de ces pays ou seulement parce qu'ils existent en tant que pays dans ta BDD ?
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 13h49   #3
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
Bonjour CinePhil et merci pour ton aide.

Pour répondre à ta question :

Ils devraient apparaître parce qu'il y a des membres inscrits qui sont originaires de ces pays.
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 15h19   #4
Membre confirmé
 
Avatar de GyZmoO
 
Homme Mickaël
Ingénieur développement logiciels
Inscription : février 2006
Messages : 402
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Âge : 27
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : février 2006
Messages : 402
Points : 238
Points : 238
Envoyer un message via MSN à GyZmoO
Salut,

ça ne serait pas le filtre where :

Citation:
WHERE E.valide ='2';
Qui te filtrerait les pays manquants?
__________________
define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.
GyZmoO est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 15h49   #5
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
Ce filtre correspond aux adhérents inscrits sur le site dont le profile à été validé.

Je ne prends en compte que les adhérents qui ont été validés.
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 16h00   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
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 : 11 029
Points : 18 324
Points : 18 324
Envoyer un message via MSN à CinePhil
Et bien il faut que tu cherches un exemple de données qui ne fonctionne pas et tu devrais trouver pourquoi ça ne fonctionne pas.
À moins que ma requête t'ai maintenant donné ce que tu cherches à obtenir ?
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 16h21   #7
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
OK Cinephil,

je teste ce soir.
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 21h43   #8
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
Bizarre,

la requête ne m'affiche rien du tout...

Quand je fais un echo

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
 
		$sql_dest = sprintf("SELECT DISTINCT A.id_pay, A.pays_".$lang."
			FROM flatforswap_pays A
			INNER JOIN flatforswap_ville B ON A.id_pay = B.id_pay
			INNER JOIN flatforswap_adherent E ON E.id_vil = B.id_vil
			WHERE E.valide = 2");
 
			echo $sql_dest;
 
			$req_dest = mysql_query($sql_dest) OR die('Erreur SQL !<br>'.$sql_dest.'<br>'.mysql_error());
 
			echo $req_dest;
 
			while($data_dest = mysql_fetch_assoc($req_dest))
			{
			  echo $data_dest['pays_'.$lang.''].'</br>';
			}
j'ai l'affichage suivant :

Code :
1
2
3
 
 
SELECT DISTINCT A.id_pay, A.pays_fr FROM flatforswap_pays A INNER JOIN flatforswap_ville B ON A.id_pay = B.id_pay INNER JOIN flatforswap_adherent E ON E.id_vil = B.id_vil WHERE E.valide = 2Resource id #16
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 07h09   #9
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
Citation:
Envoyé par sam01 Voir le message
Bonjour,

j'ai des membres inscrit sur mon site et ils viennent de différents pays.

j'aurais besoin d'avoir liste unique de chaque pays.

Pour cela, j'ai exécuté la requête suivante :

Code :
1
2
3
4
5
6
SELECT DISTINCT A.id_pay, A.pays_".$lang.", A.id_con,  B.id_vil, B.id_pay, B.ville_fr, D.cont_".$lang.", E.id_vil
FROM flatforswap_pays A
INNER JOIN flatforswap_ville B ON A.id_pay = B.id_pay
INNER JOIN flatforswap_continent D ON D.id_con = A.id_con
INNER JOIN flatforswap_adherent E ON E.id_vil = B.id_vil
WHERE E.valide ='2';
Rectification :

Avec cette requête tous les pays apparaissent bien mais en plusieurs fois, voici le résultat :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
 
SELECT DISTINCT A.id_pay, A.pays_fr, A.id_con, B.id_vil, B.id_pay, B.ville_fr, D.cont_fr, E.id_vil FROM flatforswap_pays A INNER JOIN flatforswap_ville B ON A.id_pay = B.id_pay INNER JOIN flatforswap_continent D ON D.id_con = A.id_con INNER JOIN flatforswap_adherent E ON E.id_vil = B.id_vil WHERE E.valide ='2'Resource id #16France
Malaisie
France
France
France
France
France
France
France
France
France
Pays-Bas
France
France
Canada
France
France
France
France
France
France
France
France
France
France
France
France
France
France
France
Mexique
France
France
France
France
France
France
France
France
Argentine
Canada
Italie
France
États-Unis
France
France
Belgique
France
France
France
France
France
France
Espagne
France
Espagne
France
Espagne
France
France
Pays-Bas
Suisse
France
France
Égypte
France
France
France
Pays-Bas
France
Suisse
France
Royaume-Uni
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 07h49   #10
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
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 : 11 029
Points : 18 324
Points : 18 324
Envoyer un message via MSN à CinePhil
Normal ! Tu demande les villes avec donc, autant de fois le pays qu'il y a de villes dans le pays !
Dans ma requête, j'avais retiré les colonnes ne concernant pas le pays.
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 09h55   #11
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
Citation:
Envoyé par CinePhil Voir le message
Dans ma requête, j'avais retiré les colonnes ne concernant pas le pays.
Oui mais comme je te l'ai dit, ta requête ne me renvoie aucune ligne...

Je pense donc traiter le résultat en PHP afin de retirer les doublons...
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 10h01   #12
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
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 : 11 029
Points : 18 324
Points : 18 324
Envoyer un message via MSN à CinePhil
Pas normal que ma requête ne renvoie aucune ligne et que la tienne en renvoie vu que les conditions de jointure sont les mêmes !

La seule différence que je vois entre ta requête et la mienne (hormis les colonnes que tu as ajoutées au SELECT) est le caractère alphanumérique du 2 dans la condition de restriction du WHERE. De quel type est la colonne flatforswap_adherent.valide ?
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 10h42   #13
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
la voici :

Code :
1
2
 
 `valide` enum('0','1','2','3') NOT NULL DEFAULT '0',
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 10h45   #14
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
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 : 11 029
Points : 18 324
Points : 18 324
Envoyer un message via MSN à CinePhil
OK, donc il faut effectivement mettre le 2 entre apostrophes et tu devrais avoir des résultats avec ma requête.
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 10h54   #15
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
OK, super!

Merci Cinephil.

Je met ça en place ce soir.

Si je veux les pays par ordre alphabétique je rajoute ça à la fin de la requête

Code :
1
2
 
ORDER BY A.pays_".$lang."
C'est bien ça ?

Par contre j'ai absolument besoin des continents,

la requête finale devient donc

Code :
1
2
3
4
5
6
 
$sql_dest = sprintf("SELECT DISTINCT A.id_pay, A.pays_".$lang.", A.id_con, D.cont_".$lang."
			FROM flatforswap_pays A
			INNER JOIN flatforswap_ville B ON A.id_pay = B.id_pay
			INNER JOIN flatforswap_adherent E ON E.id_vil = B.id_vil
			WHERE E.valide = 2 ORDER BY A.pays_".$lang." ASC");
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 11h06   #16
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
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 : 11 029
Points : 18 324
Points : 18 324
Envoyer un message via MSN à CinePhil
Si tu as besoin des continents, ajoute la jointure avec la table des continents :
Code :
1
2
3
4
5
6
7
SELECT DISTINCT A.id_pay, A.pays_".$lang.", c.id_con, c.cont_".$lang". 
FROM flatforswap_pays A
INNER JOIN flatforswap_continent c ON c.id_con = A.id_con
INNER JOIN flatforswap_ville B ON A.id_pay = B.id_pay
    INNER JOIN flatforswap_adherent E ON E.id_vil = B.id_vil
WHERE E.valide = '2'
ORDER BY A.pays_".$lang
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 09h34   #17
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
Merci Cinephil, ça fonctionne.
sam01 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 18h12.


 
 
 
 
Partenaires

Hébergement Web