Requetes sur plusieurs tables
paintbox
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
BadGuitarist Messages postés 367 Date d'inscription Statut Membre Dernière intervention -
BadGuitarist Messages postés 367 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
je suis débutant en Mysql. J essaye (à titre d'exercice) de faire un site d'agence immobilière. J'ai donc créé une base de données comportant les tables suivantes : biens, type_biens(=Maison, appartement, studio...), statut_bien (=a vendre, vendu, a louer, loué...), link_statut(permettant de faire la liaison entre biens et statut_bien) et communes.
Je souhaites afficher toutes les maisons à vendre et afficher la commune correspondante. J'arrive sans problème à afficher les maisons à vendre mais lorsque je lui demande d'afficher également la commune correspondant au bien, pour tous les biens, il m'affiche toutes les communes. Pour faire plus simple, si j'ai 4 biens de 4 communes différentes, au lieu de m'afficher les 4 biens avec leur commune respective, il m'affiche 4 X 4 soit 16 biens.
J'ai essayé avec des sous-requêtes, avec une table temporaire (càd mettre le résultat dans une table et pour chaque élément de cette table afficher la commune) mais ça ne marche pas.
Quelqu'un aurait une idée?
Voici ci-dessous la construction de ma base de données.
Merci de m'avoir lu et d'avance merci à tous ceux qui m'apporteront leur aide.
je suis débutant en Mysql. J essaye (à titre d'exercice) de faire un site d'agence immobilière. J'ai donc créé une base de données comportant les tables suivantes : biens, type_biens(=Maison, appartement, studio...), statut_bien (=a vendre, vendu, a louer, loué...), link_statut(permettant de faire la liaison entre biens et statut_bien) et communes.
Je souhaites afficher toutes les maisons à vendre et afficher la commune correspondante. J'arrive sans problème à afficher les maisons à vendre mais lorsque je lui demande d'afficher également la commune correspondant au bien, pour tous les biens, il m'affiche toutes les communes. Pour faire plus simple, si j'ai 4 biens de 4 communes différentes, au lieu de m'afficher les 4 biens avec leur commune respective, il m'affiche 4 X 4 soit 16 biens.
J'ai essayé avec des sous-requêtes, avec une table temporaire (càd mettre le résultat dans une table et pour chaque élément de cette table afficher la commune) mais ça ne marche pas.
Quelqu'un aurait une idée?
Voici ci-dessous la construction de ma base de données.
Merci de m'avoir lu et d'avance merci à tous ceux qui m'apporteront leur aide.
DROP TABLE IF EXISTS 'biens'; CREATE TABLE 'biens' ( 'id_biens' int(11) NOT NULL AUTO_INCREMENT, 'adresse' varchar(250) NOT NULL, 'pays' varchar(70) NOT NULL DEFAULT 'Belgique', 'prix' mediumint(25) NOT NULL, 'description' text NOT NULL, 'code_bien' char(11) NOT NULL, PRIMARY KEY ('id_biens') ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1; LOCK TABLES 'biens' WRITE; /*!40000 ALTER TABLE 'biens' DISABLE KEYS */; INSERT INTO 'biens' ('id_biens','adresse','pays','prix','description','code_bien') VALUES (1,'Avenue du Parc','Belgique',213000,'Jolie Petite maison d\'habitation','10'), (2,'Rue des Sciences','Belgique',275000,'Splendide Villa 4 facades','20'), (3,'Avenue de la piscine','Belgique',543000,'Immeuble de rapport avec nombreux garages','10'), (4,'Chausse d\'Hacht','Belgique',123000,'Appartement 2 chambres','30'), (5,'Rue de la fontaine','Belgique',321000,'Maison à restaurer','30'); /*!40000 ALTER TABLE 'biens' ENABLE KEYS */; UNLOCK TABLES; # Dump of table communes # ------------------------------------------------------------ DROP TABLE IF EXISTS 'communes'; CREATE TABLE 'communes' ( 'id_commune' int(11) NOT NULL AUTO_INCREMENT, 'code_postal' mediumint(5) NOT NULL, 'ville' varchar(75) NOT NULL, 'commune' varchar(75) NOT NULL, 'langue' varchar(2) NOT NULL, PRIMARY KEY ('id_commune'), KEY 'code_postal' ('code_postal'), KEY 'ville' ('ville'), KEY 'commune' ('commune') ) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8; LOCK TABLES 'communes' WRITE; /*!40000 ALTER TABLE 'communes' DISABLE KEYS */; INSERT INTO 'communes' ('id_commune','code_postal','ville','commune','langue') VALUES (1,1000,'Bruxelles','Bruxelles','FN'), (2,1000,'Bruxelles','Laeken (Bru.)','FN'), (3,1000,'Bruxelles','Neder-over-Heembeek (Bru.)','FN'), (4,1000,'Bruxelles','Haren (Bru.)','FN'), (5,1030,'Bruxelles','Schaerbeek','FN'), (6,1040,'Bruxelles','Etterbeek','FN'), (7,1050,'Bruxelles','Ixelles','FN'), (8,1060,'Bruxelles','Saint-Gilles','FN'), (9,1070,'Bruxelles','Anderlecht','FN'), (10,1080,'Bruxelles','Molenbeek-Saint-Jean','FN'), (11,1081,'Bruxelles','Koekelberg','FN'), (12,1082,'Bruxelles','Berchem-Sainte-Agathe','FN'), (13,1083,'Bruxelles','Ganshoren','FN'), (14,1090,'Bruxelles\n','Jette','FN'), (15,1140,'Bruxelles','Evere','FN'), (16,1150,'Bruxelles','Woluwe-Saint-Pierre','FN'), (17,1160,'Bruxelles','Auderghem','FN'), (18,1170,'Bruxelles','Watermael-Boitsfort','FN'), (19,1180,'Bruxelles','Uccle','FN'), (20,1190,'Bruxelles','Forest','FN'), (21,1200,'Bruxelles','Woluwe-Saint-Lambert','FN'), (22,1210,'Bruxelles','Saint-Josse-ten-Noode','FN'); /*!40000 ALTER TABLE 'communes' ENABLE KEYS */; UNLOCK TABLES; # Dump of table link_communes # ------------------------------------------------------------ DROP TABLE IF EXISTS 'link_communes'; CREATE TABLE 'link_communes' ( 'id_biens' int(11) NOT NULL, 'code_postal' mediumint(5) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; LOCK TABLES 'link_communes' WRITE; /*!40000 ALTER TABLE 'link_communes' DISABLE KEYS */; INSERT INTO 'link_communes' ('id_biens','code_postal') VALUES (1,5), (2,6), (3,1), (4,5), (5,1); /*!40000 ALTER TABLE 'link_communes' ENABLE KEYS */; UNLOCK TABLES; # Dump of table link_statut # ------------------------------------------------------------ DROP TABLE IF EXISTS 'link_statut'; CREATE TABLE 'link_statut' ( 'id_biens' mediumint(11) NOT NULL, 'code_statut' char(5) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; LOCK TABLES 'link_statut' WRITE; /*!40000 ALTER TABLE 'link_statut' DISABLE KEYS */; INSERT INTO 'link_statut' ('id_biens','code_statut') VALUES (1,'10'), (2,'20'), (3,'10'), (4,'30'), (5,'10'); /*!40000 ALTER TABLE 'link_statut' ENABLE KEYS */; UNLOCK TABLES; # Dump of table statut_bien # ------------------------------------------------------------ DROP TABLE IF EXISTS 'statut_bien'; CREATE TABLE 'statut_bien' ( 'id_statut' int(11) NOT NULL AUTO_INCREMENT, 'code_statut' char(5) NOT NULL, 'statut_bien' varchar(50) NOT NULL, PRIMARY KEY ('id_statut') ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1; LOCK TABLES 'statut_bien' WRITE; /*!40000 ALTER TABLE 'statut_bien' DISABLE KEYS */; INSERT INTO 'statut_bien' ('id_statut','code_statut','statut_bien') VALUES (1,'10','a vendre'), (2,'15','vendu'), (3,'20','a louer'), (4,'25','loue'); /*!40000 ALTER TABLE 'statut_bien' ENABLE KEYS */; UNLOCK TABLES; # Dump of table type_biens # ------------------------------------------------------------ DROP TABLE IF EXISTS 'type_biens'; CREATE TABLE 'type_biens' ( 'id_type_biens' int(11) NOT NULL AUTO_INCREMENT, 'code_bien' char(11) NOT NULL, 'type_bien' varchar(50) NOT NULL, PRIMARY KEY ('id_type_biens') ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1; LOCK TABLES 'type_biens' WRITE; /*!40000 ALTER TABLE 'type_biens' DISABLE KEYS */; INSERT INTO 'type_biens' ('id_type_biens','code_bien','type_bien') VALUES (1,'10','Maison'), (2,'20','Appartement'), (3,'30','Studio'), (4,'40','Magasin'), (5,'50','Bureau'); /*!40000 ALTER TABLE 'type_biens' ENABLE KEYS */; UNLOCK TABLES;
A voir également:
- Requetes sur plusieurs tables
- Tables des matières word - Guide
- Tables ascii - Guide
- Tables des annexes ✓ - Forum Word
- Nos systèmes ont détecté un trafic exceptionnel sur votre réseau informatique. cette page permet de vérifier que c'est bien vous qui envoyez des requêtes, et non un robot ✓ - Forum Virus
- Comment faire une table des annexes sur word - Forum Word
1 réponse
Bonsoir,
Quand tu mets en relation les tables, il ne faut pas oublier de préciser la condition de jointure (en général, c'est une équi-jointure) :
par exemple :
Remarque :
dans ton MCD, tu n'as aucune donnée qui te permettent de mettre en relation biens et communes ... sauf si j'ai loupé une info.
tu pourrais par exemple ajouter :
- dans la table biens le code postal et le pays
- dans la table communes le pays
Ainsi cela te permettrait de faire une relation entre biens et communes.
Cordialement,
BG.
Quand tu mets en relation les tables, il ne faut pas oublier de préciser la condition de jointure (en général, c'est une équi-jointure) :
par exemple :
SELECT T1.id_biens, T1.adresse, T3.staut_bien FROM biens T1, link_statut T2, statut_bien T3 WHERE T1.id_biens = T2.id_biens AND T2.code_statut = T3.code_statut AND T3.code_statut = '10'
Remarque :
dans ton MCD, tu n'as aucune donnée qui te permettent de mettre en relation biens et communes ... sauf si j'ai loupé une info.
tu pourrais par exemple ajouter :
- dans la table biens le code postal et le pays
- dans la table communes le pays
Ainsi cela te permettrait de faire une relation entre biens et communes.
Cordialement,
BG.