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 13/04/2011, 16h36   #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 requête retournant la liste des pays

Bonjour à tous,

j'ai la requête suivante qui fonctionne bien et qui me donne la liste des adhérents inscrits ( A.valide = 2) :

Code :
1
2
3
4
5
6
7
8
 
 
$sql_dest = sprintf("SELECT A.id_adh, A.id_vil, A.date_ins, B.id_vil, B.id_pay, B.ville_fr, C.id_pay, C.id_con, C.pays_".$lang.", D.cont_".$lang."
			FROM flatforswap_adherent A
			INNER JOIN flatforswap_ville B ON A.id_vil = B.id_vil
			INNER JOIN flatforswap_pays C ON B.id_pay = C.id_pay 
			INNER JOIN flatforswap_continent D ON D.id_con = C.id_con
			WHERE A.valide ='2')");}
Cett fois-ci j'aimerais avoir la liste UNIQUE du couple continent/pays des adherents inscrits.

J'ai tenté la requête suivante :

Code :
1
2
3
4
5
6
7
 
$sql_dest = sprintf("SELECT A.id_pays, 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')");}
Je la testerai ce soir mais qu'en pensez-vous ?
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2011, 17h25   #2
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
La requête va retourner autant de lignes que d'adhérents.
D'autre part, si c'est seulement les couples uniques Continent/Pays qu'il faut, alors il faut également enlever de cette requête toute référence à des villes.
Enfin, il faudra mettre un DISTINCT juste derrière le SELECT.
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 08h03   #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 ced,

quand je retire la notion de ville j'ai l'erreur suivante :

Code :
1
2
3
4
5
 
 
Erreur SQL !
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_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'
Unknown COLUMN 'B.id_vil' IN 'field list'
et quand je remet la notion de ville avec la requête suivante. De plus je ne peux pas retirer la notion de table ville car c'est la ville qui fait le lien entre l'adhérent et le pays...

Code :
1
2
3
4
5
6
7
8
9
 
 
 
			$sql_dest = sprintf("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'");
J'ai une liste avec plein de doublons... j'ai une vingtaine de fois le pays france et une fois le pays canada, et je ne vois pas apparaître pays-bas, Malaisie (alors que ce sont des pays qui devraient apparaître...)

J'ai l'impression que le DISTINCT ne fonctionne pas...

Pour info voci la structure de mes tables :

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
 
 
 
-- 
-- Structure de la table `flatforswap_ville`
-- 
 
CREATE TABLE `flatforswap_ville` (
  `id_vil` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `id_pay` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `ville_fr` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY  (`id_vil`),
  KEY `id_pay` (`id_pay`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 PACK_KEYS=0 COMMENT='table ville du site FLATFORSWAP' AUTO_INCREMENT=1 ;
 
-- 
 
 
CREATE TABLE `flatforswap_pays` (
  `id_pay` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `id_con` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `code` char(2) NOT NULL DEFAULT '',
  `pays_fr` varchar(255) NOT NULL DEFAULT '',
  `pays_en` varchar(255) DEFAULT NULL,
  `pays_es` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY  (`id_pay`),
  KEY `id_con` (`id_con`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 PACK_KEYS=0 COMMENT='table pays du site FLATFORSWAP' AUTO_INCREMENT=239 ;
 
 
 
 
CREATE TABLE `flatforswap_continent` (
  `id_con` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `cont_fr` varchar(255) NOT NULL DEFAULT '',
  `cont_en` varchar(255) NOT NULL DEFAULT '',
  `cont_es` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY  (`id_con`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 PACK_KEYS=0 COMMENT='table continent du site FLATFORSWAP' AUTO_INCREMENT=9 ;
 
-- 
 
 
CREATE TABLE `flatforswap_adherent` (
  `id_adh` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `id_vil` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `id_fac` int(11) NOT NULL DEFAULT '0',
  `mail` varchar(128) NOT NULL DEFAULT '',
  `nom` text NOT NULL,
  `prenom` text NOT NULL,
  `mdp` varchar(128) NOT NULL DEFAULT '',
  `ad_ligne1` varchar(128) NOT NULL DEFAULT '',
  `ad_ligne2` varchar(128) NOT NULL DEFAULT '',
  `ad_cp` varchar(125) NOT NULL DEFAULT '',
  `civilite` text NOT NULL,
  `telephone` varchar(125) NOT NULL DEFAULT '',
  `ad_ip` varchar(50) DEFAULT NULL,
  `mp` enum('a','d') NOT NULL DEFAULT 'a',
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `anglais` enum('0','1') NOT NULL DEFAULT '0',
  `français` enum('0','1') NOT NULL DEFAULT '0',
  `espagnol` enum('0','1') NOT NULL DEFAULT '0',
  `autres` varchar(125) NOT NULL DEFAULT '',
  `date_ins` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `valide` enum('0','1','2','3') NOT NULL DEFAULT '0',
  `lat` float(10,6) NOT NULL DEFAULT '0.000000',
  `lng` float(10,6) NOT NULL DEFAULT '0.000000',
  `type` varchar(30) NOT NULL DEFAULT '',
  PRIMARY KEY  (`id_adh`),
  UNIQUE KEY `mail_2` (`mail`),
  KEY `mail` (`mail`),
  KEY `id_vil` (`id_vil`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 PACK_KEYS=0 COMMENT='table adherent du site FLATFORSWAP' AUTO_INCREMENT=1 ;
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h33.


 
 
 
 
Partenaires

Hébergement Web