subrenaud Posté 17 Février 2007 Posté 17 Février 2007 Bonjour, Je suis en train de monter mon premier site dynamique à l'aide de quelques tutoriels. Voilà donc que j'aurais besoin d'un petit coup de main s'il-vous-plait. Mise en situation: - Une page Master qui affiche 4 appartements(repeat) - Une page détails pour chaque appart. Que je teste avec id=1 ou id=2 ou 3, la page détaillée affiche toujours et partout les données de l'appartement 1. La variable 'appartementsID' n'a pas l'air d'être prise en compte. Ça marche pourtant bien ailleurs dans le site. Tables: appartements -> id nom ville arrondissement quartier description -> id_appart superficie equipement images -> id_appart plan thumb thumb2 commentaires -> nom date commentaire C'est avec la requête ci-bas que j'ai pu extraire toutes les informations dont j'ai besoin pour mes pages (Requête sur 3 des 4 tables, toutes les colonnes): <?php require_once('../Connections/PHPMySQLconn.php'); ?><?php$colname_rsFiche = "-1";if (isset($_GET['appartementsID'])) { $colname_rsFiche = (get_magic_quotes_gpc()) ? $_GET['appartementsID'] : addslashes($_GET['appartementsID']);}mysql_select_db($database_PHPMySQLconn, $PHPMySQLconn);$query_rsFiche = sprintf("SELECT appartements.id, appartements.nom, appartements.ville, appartements.arrondissement, appartements.quartier, description.id_appart, description.superficie, description.equipement, images.thumb1, images.photo1, images.thumb2, images.photo2 WHERE id = %s", $colname_rsFiche);$rsFiche = mysql_query($query_rsFiche, $PHPMySQLconn) or die(mysql_error());$row_rsFiche = mysql_fetch_assoc($rsFiche);$totalRows_rsFiche = mysql_num_rows($rsFiche);?> Si vous pouvez me dire ce que je dois faire, sinon me donner un indice, j'apprécierai beaucoup ! à bientôt,
TheRec Posté 17 Février 2007 Posté 17 Février 2007 Bonjour, Ta requête devrait avoir une clause "FROM appartements, description, images, commentaires" avant la clause "WHERE", ainsi tu indiques à MySQL dans quelles tables doit aller récupérer les champs que tu as définis avant cette clause FROM. Ce qui m'étonne c'est qu'en l'état ton code devrait simplement afficher une erreur de syntaxe MySQL vu que cette requête n'est pas synataxiquement correcte...
Dan Posté 17 Février 2007 Posté 17 Février 2007 Tu devrais aussi mettre des guillemets simples autour du %s ... ../.. WHERE id = '%s' ", ../..
subrenaud Posté 17 Février 2007 Auteur Posté 17 Février 2007 (modifié) Bonjour me revoilà, J'arrive bien à afficher la liste des appartements sur la page Master. Les liens de chaque appart mène bien vers la page détails (fiche.php). Cependant, les données proviennent d'une seule table. Avec le même cheminement, j'ai besoin d'afficher des données en provenance de 6 tables et non une seule comme actuellement. Comment ajouter ses tables (description, prix_defaut, images, commentaires, ...) et toutes leurs colonnes, en s'assurant que la variable prennent en compte les nouvelles tables ? Lien vers mes tables Code de la page Master (coordonnees.php): <?php require_once('../Connections/PHPMySQLconn.php'); ?><?php$currentPage = $_SERVER["PHP_SELF"];$maxRows_rsBisCoordonnees = 4;$pageNum_rsBisCoordonnees = 0;if (isset($_GET['pageNum_rsBisCoordonnees'])) { $pageNum_rsBisCoordonnees = $_GET['pageNum_rsBisCoordonnees'];}$startRow_rsBisCoordonnees = $pageNum_rsBisCoordonnees * $maxRows_rsBisCoordonnees;mysql_select_db($database_PHPMySQLconn, $PHPMySQLconn);$query_rsBisCoordonnees = "SELECT * FROM appartements ORDER BY nom ASC";$query_limit_rsBisCoordonnees = sprintf("%s LIMIT %d, %d", $query_rsBisCoordonnees, $startRow_rsBisCoordonnees, $maxRows_rsBisCoordonnees);$rsBisCoordonnees = mysql_query($query_limit_rsBisCoordonnees, $PHPMySQLconn) or die(mysql_error());$row_rsBisCoordonnees = mysql_fetch_assoc($rsBisCoordonnees);if (isset($_GET['totalRows_rsBisCoordonnees'])) { $totalRows_rsBisCoordonnees = $_GET['totalRows_rsBisCoordonnees'];} else { $all_rsBisCoordonnees = mysql_query($query_rsBisCoordonnees); $totalRows_rsBisCoordonnees = mysql_num_rows($all_rsBisCoordonnees);}$totalPages_rsBisCoordonnees = ceil($totalRows_rsBisCoordonnees/$maxRows_rsBisCoordonnees)-1;$queryString_rsBisCoordonnees = "";if (!empty($_SERVER['QUERY_STRING'])) { $params = explode("&", $_SERVER['QUERY_STRING']); $newParams = array(); foreach ($params as $param) { if (stristr($param, "pageNum_rsBisCoordonnees") == false && stristr($param, "totalRows_rsBisCoordonnees") == false) { array_push($newParams, $param); } } if (count($newParams) != 0) { $queryString_rsBisCoordonnees = "&" . htmlentities(implode("&", $newParams)); }}$queryString_rsBisCoordonnees = sprintf("&totalRows_rsBisCoordonnees=%d%s", $totalRows_rsBisCoordonnees, $queryString_rsBisCoordonnees);?> Code de la page Détails (fiche.php): <?php require_once('../Connections/PHPMySQLconn.php'); ?><?php$maxRows_DetailRS1 = 4;$pageNum_DetailRS1 = 0;if (isset($_GET['pageNum_DetailRS1'])) { $pageNum_DetailRS1 = $_GET['pageNum_DetailRS1'];}$startRow_DetailRS1 = $pageNum_DetailRS1 * $maxRows_DetailRS1;mysql_select_db($database_PHPMySQLconn, $PHPMySQLconn);$recordID = $_GET['recordID'];$query_DetailRS1 = "SELECT * FROM appartements WHERE id = $recordID ORDER BY nom ASC";$query_limit_DetailRS1 = sprintf("%s LIMIT %d, %d", $query_DetailRS1, $startRow_DetailRS1, $maxRows_DetailRS1);$DetailRS1 = mysql_query($query_limit_DetailRS1, $PHPMySQLconn) or die(mysql_error());$row_DetailRS1 = mysql_fetch_assoc($DetailRS1);if (isset($_GET['totalRows_DetailRS1'])) { $totalRows_DetailRS1 = $_GET['totalRows_DetailRS1'];} else { $all_DetailRS1 = mysql_query($query_DetailRS1); $totalRows_DetailRS1 = mysql_num_rows($all_DetailRS1);}$totalPages_DetailRS1 = ceil($totalRows_DetailRS1/$maxRows_DetailRS1)-1;?> Merci ! Modifié 17 Février 2007 par subrenaud
TheRec Posté 17 Février 2007 Posté 17 Février 2007 As-tu pris la peine de lire les réponses à ton premier message ? Enfin... au risque de me répéter, dans le fichier fiche.php change la requête : $query_DetailRS1 = "SELECT * FROM appartements WHERE id = $recordID ORDER BY nom ASC"; En $query_DetailRS1 = "SELECT appartements.id, appartements.nom, appartements.ville, appartements.arrondissement, appartements.quartier, description.id_appart, description.superficie, description.equipement, images.thumb1, images.photo1, images.thumb2, images.photo2 FROM appartements, description, images, commentaires WHERE appartements.id = $recordID ORDER BY nom ASC"; Bien entendu pour que ces jointures soient optimisées il faut que toutes ces tables soient liée par des clé étrangères ayant un INDEX défini. Par rapport à ce que Dan à dit, les guillemets ne sont pas "nécessaires" si ton $recordID est bien un entier correspondant à un id (à toi de t'assurer au préalable que ces données ne soient pas dangereuses afin t'éviter les injections SQL).
subrenaud Posté 17 Février 2007 Auteur Posté 17 Février 2007 Bonjour The Rec, Grand merci pour ton aide. Oui je lis et j'essaye de faire ce qu'on me dit mais les choses ne sont pas encore tout à fait claires pour moi. Je viens de changer la requête de la page Fiche, tel que tu me le conseilles. <?php require_once('../Connections/PHPMySQLconn.php'); ?><?php$maxRows_DetailRS1 = 10;$pageNum_DetailRS1 = 0;if (isset($_GET['pageNum_DetailRS1'])) { $pageNum_DetailRS1 = $_GET['pageNum_DetailRS1'];}$startRow_DetailRS1 = $pageNum_DetailRS1 * $maxRows_DetailRS1;mysql_select_db($database_PHPMySQLconn, $PHPMySQLconn);$recordID = $_GET['recordID'];$query_DetailRS1 = "SELECT * FROM appartements WHERE id = $recordID ORDER BY nom ASC";$query_limit_DetailRS1 = sprintf("%s LIMIT %d, %d", $query_DetailRS1, $startRow_DetailRS1, $maxRows_DetailRS1);$DetailRS1 = mysql_query($query_limit_DetailRS1, $PHPMySQLconn) or die(mysql_error());$row_DetailRS1 = mysql_fetch_assoc($DetailRS1);if (isset($_GET['totalRows_DetailRS1'])) { $totalRows_DetailRS1 = $_GET['totalRows_DetailRS1'];} else { $all_DetailRS1 = mysql_query($query_DetailRS1); $totalRows_DetailRS1 = mysql_num_rows($all_DetailRS1);}$totalPages_DetailRS1 = ceil($totalRows_DetailRS1/$maxRows_DetailRS1)-1;$maxRows_DetailRS1 = 4;$pageNum_DetailRS1 = 0;if (isset($_GET['pageNum_DetailRS1'])) { $pageNum_DetailRS1 = $_GET['pageNum_DetailRS1'];}$startRow_DetailRS1 = $pageNum_DetailRS1 * $maxRows_DetailRS1;mysql_select_db($database_PHPMySQLconn, $PHPMySQLconn);$recordID = $_GET['recordID'];$query_DetailRS1 = "SELECT appartements.id, appartements.nom, appartements.ville, appartements.arrondissement, appartements.quartier, description.id_appart, description.superficie, description.equipement, images.thumb1, images.photo1, images.thumb2, images.photo2 FROM appartements, description, images, commentaires WHERE appartements.id = $recordID ORDER BY nom ASC";$query_limit_DetailRS1 = sprintf("%s LIMIT %d, %d", $query_DetailRS1, $startRow_DetailRS1, $maxRows_DetailRS1);$DetailRS1 = mysql_query($query_limit_DetailRS1, $PHPMySQLconn) or die(mysql_error());$row_DetailRS1 = mysql_fetch_assoc($DetailRS1);if (isset($_GET['totalRows_DetailRS1'])) { $totalRows_DetailRS1 = $_GET['totalRows_DetailRS1'];} else { $all_DetailRS1 = mysql_query($query_DetailRS1); $totalRows_DetailRS1 = mysql_num_rows($all_DetailRS1);}$totalPages_DetailRS1 = ceil($totalRows_DetailRS1/$maxRows_DetailRS1)-1;?> La page Fiche affiche bien les champs supplémentaires qui proviennent des tables ajoutées mais il n'y a encore que les données de la première table(appartement) qui changent. Le problème vient peut-être de mes tables. La clé primaire de la table Appartements est 'ID'. La clé primaire de toutes les autres tables est 'id_appart'. -- phpMyAdmin SQL Dump-- version 2.9.2-- [url="http://www.phpmyadmin.net"]http://www.phpmyadmin.net[/url]-- -- Serveur: localhost-- Généré le : Samedi 17 Février 2007 à 18:33-- Version du serveur: 4.1.22-- Version de PHP: 5.2.0-- -- Base de données: `escaparis`-- -- ---------------------------------------------------------- -- Structure de la table `appartements`-- CREATE TABLE `appartements` ( `id` int(6) NOT NULL auto_increment, `nom` varchar(20) NOT NULL default '', `ville` varchar(10) NOT NULL default '', `arrondissement` tinyint(30) NOT NULL default '0', `quartier` varchar(30) NOT NULL default '', `cote` tinyint(5) NOT NULL default '0', PRIMARY KEY (`id`), UNIQUE KEY `nom` (`nom`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=16;-- -- Contenu de la table `appartements`-- INSERT INTO `appartements` (`id`, `nom`, `ville`, `arrondissement`, `quartier`, `cote`) VALUES (1, 'Beaujon', 'Paris', 8, 'Étoile', 3),(2, 'Niel', 'Paris', 17, 'Étoile - Ternes', 4),(3, 'Square', 'Paris', 8, 'Étoile - Ternes', 4),(4, 'St-Honore', 'Paris', 17, 'Étoile - Faubourg', 4),(5, 'truc', 'vil1', 0, 'quart', 3),(10, 'trucnom', 'vil', 0, 'quart', 3),(14, 'roberto', 'paris', 17, 'Ternes', 4),(13, 'sa', 'sa', 0, 's', 0),(11, 'sad', 'sa', 0, 's', 0),(15, 'er', 're', 0, 'ere', 1);-- ---------------------------------------------------------- -- Structure de la table `commentaires`-- CREATE TABLE `commentaires` ( `date` datetime NOT NULL default '0000-00-00 00:00:00', `titre` varchar(100) NOT NULL default '', `auteur` varchar(50) NOT NULL default '', `id_commentaire` int(6) NOT NULL auto_increment, `id_appart` int(6) NOT NULL default '0', `pays` tinytext NOT NULL, PRIMARY KEY (`id_commentaire`,`id_appart`), UNIQUE KEY `id_commentaire` (`id_commentaire`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5;-- -- Contenu de la table `commentaires`-- INSERT INTO `commentaires` (`date`, `titre`, `auteur`, `id_commentaire`, `id_appart`, `pays`) VALUES ('2007-04-06 00:00:00', 'Bien reçu', 'M. Gignac', 1, 1, 'Canada'),('0000-00-00 00:00:00', '', '', 2, 2, ''),('0000-00-00 00:00:00', '', '', 3, 3, ''),('0000-00-00 00:00:00', '', '', 4, 4, '');-- ---------------------------------------------------------- -- Structure de la table `description`-- CREATE TABLE `description` ( `id_appart` int(6) NOT NULL default '0', `superficie` text NOT NULL, `courte_desc` text NOT NULL, `description` text NOT NULL, `equipement` text NOT NULL, `cadre` text NOT NULL, `environs` text NOT NULL, `transport` text NOT NULL, `metro` text NOT NULL, `avertissement` text NOT NULL, PRIMARY KEY (`id_appart`), FULLTEXT KEY `description` (`description`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;-- -- Contenu de la table `description`-- INSERT INTO `description` (`id_appart`, `superficie`, `courte_desc`, `description`, `equipement`, `cadre`, `environs`, `transport`, `metro`, `avertissement`) VALUES (1, '10', 'Petit studio équipé pour un séjour bon marché en toute indépendance au pied des transports dans un quartier prestigieux.', 'Idéalement situé à 200m des Champs Elysées dans un quartier résidentiel prisé. Ce petit studio très clair et calme offre le confort d''un vrai lit et de sanitaires neufs. La kitchenette permet de préparer des repas simples et le petit déjeuner.', 'Literie pour 1 lit 2 places. Draps et linge compris, télévision, micro-onde, réfrigérateur avec compartiment congélation, cafetière, douche, ascenseur, chauffage, chaîne sono, câble / satellite, prise de télévision', 'Petit studio - Étage 8 sur 8 avec ascenceur. Vue sur les toits. L''accès se fait par ascenseur de service et passage souterrain (ancienne entrée du personnel)', 'À 5 minutes à pieds de l''Arc de Triomphe, 10 minutes du Palais des Congrès (Porte Maillot). Boutiques et restaurants: 100 m, Supermarché: 300 m', 'A 150 mètres de l''étoile et ses nombreuses lignes de transport (Metro 1,2,6,9, ReR A), le quartier est aussi desservi par de nombreux bus (22, 31 , 43, 52, 83, 93). Les bus Air France pour l''aeroport Charles de Gaulle s''arrêtent à 250 mètres.', 'Charle de Gaulle', 'Propriétaire se trouvant à proximité. Chèques-Vacances acceptés (France). Enfants en bas âge non souhaités. Fumeurs non souhaités.'),(2, '38', 'Le confort du neuf dans un superbe immeuble haussmanien au sein du\r\n quartier vivant des Ternes pour un séjour pour un séjour en vrai parisien !', '2 pièces - 33 m2 Idéalement situé dans le quartier chic et animé de\r\n Ternes et de l''Étoile, l''appartement offre tout le confort d''un appartement neuf et\r\n lumineux, le calme d''un dernier étage desservi par un ascenceur et le charme d''un\r\n immeuble de grand style. La proximité des lignes de métro et RER, le marché Poncelet\r\n , la variété des restaurants et des grands magasins sauront vous séduire. Quelques\r\n minutes de marche et vous serez sur les Champs Elysées.', 'Literie pour 1 lit 2 places. 1 canape-lit. Draps et linge compris,\r\n congélateur, telévision, plaque de cuisson, four, micro-onde, réfrigérateur avec\r\n compartiment congélation, cafetière, grille pain, douche, ascenseur, fer à repasser,\r\n sêche cheveux, chaîne sono', 'Étage 6 sur 6 avec ascenceur, vue sur court.', 'À quelques minutes de marche de l''Arc de Triomphe et des Champs-Élysées et 10\r\n minutes du Palais des Congrès (Porte Maillot) Commerces Boutiques et restaurants:\r\n 100 m, Supermarché: 300 m', 'Situé entre les stations Charles de Gaulle Etoile (300m) , Ternes (200m) et\r\n Péreire (200m). 2 lignes de ReR, 3 lignes de métros et des bus au pied de l''immeuble\r\n (92, 93, ...)', 'Charles de Gaule', 'Propriétaire se trouvant à proximité. Chèques-Vacances acceptés (France).\r\n Fumeurs non souhaités.'),(3, '22', 'Studio calme et ensoleillé doté du meilleur confort pour le séjour\r\n d''affaires ou de tourisme dans un quartier recherché sur un axe de transport\r\n privilégié.', 'Studio 22m2 avec balcon Au sein d''une rue calme du quartier chic et\r\n animé des Ternes et à 5 minutes à pied des Champs Elysées. Studio de charme rénové\r\n en été 2005 très lumineux et calme avec balcon privé orienté Sud Ouest sans vis à\r\n vis dans un immeuble pierre de taille avec gardien.', 'Literie pour 1 lit 2 places. Draps et linge compris, téléphone, télévision,\r\n four, micro-onde, réfrigérateur avec compartiment congélation, cafetière, grille\r\n pain, douche, baignoire, ascenseur, Fer à repasser, sêche cheveux, aspirateur,\r\n chauffage, chaîne sono, câble / satellite, prise de télévision', 'Étage 6 sur 7 avec ascenceur, vue sur la ville orientation sud-Ouest.', 'À 5 minutes à pieds de l''Arc de Triomphe, 10 minutes du Palais des Congrès\r\n (Porte Maillot). Boutiques et restaurants: 100 m, Supermarché: 300 m', 'Metro: 200 m autobus: 50 m, RER, Station de bus vers aéroport CDG/Orly: 300m.', 'Charles de Gaulle', 'Propriétaire se trouvant à proximité. Chèques-Vacances acceptés (France).\r\n Fumeurs non souhaités.'),(4, '29', 'Le charme de l''ancien dans le meilleur confort pour votre séjour\r\n d''affaire ou de loisir au coeur d''un environnement de prestige.', '2 pièces - 29m2 Au sein du quartier calme et prestigieux de l''Etoile\r\n à proximité des Ternes et des Champs Elysées, l''appartement dispose de tout le\r\n confort et le calme pour un séjour d''affaires ou de tourisme, seul avec des amis ou\r\n en famille.', 'Literie pour 1 lit 2 places. Canapé-lit, lave linge, congélateur, téléphone,\r\n telévision, plaque de cuisson, four, micro-onde, réfrigérateur avec compartiment\r\n congélation, cafetière, grille pain, bouilloire, douche, baignoire, lit bébé,\r\n ascenseur, fer à repasser, table à repasser, sêche cheveux, aspirateur, chauffage,\r\n chaîne sono, câble/satellite, prise de télévision.', 'Étage 1 sur 6 avec ascenceur, vue sur la rue du Faubourg St-Honoré.', 'À 5 minutes à pieds de l''Arc de Triomphe, 10 minutes du Palais des Congrès\r\n (Porte Maillot) Boutiques et restaurants: 100 m, Supermarché: 300 m', 'Metro: 200 m autobus: 50 m, RER, Station de bus vers aéroport CDG/Orly: 300m.', 'Charles de Gaulle', 'Propriétaire se trouvant à proximité. Chèques-Vacances acceptés (France).\r\n Animaux autorisés. Fumeurs non souhaités.'),(10, '13', 'rgeg egg', 'gfg fgdfgw ', 'fsg sdfg', 'dg gdfgs', 'fgd gg', 'dfg fdg', ' dg gd', ' dfg gfd'),(11, '12', 'sdq', 'as', 'afds', 'dfs', 'sdf', 'dsf', 'dsf', 'dsf');-- ---------------------------------------------------------- -- Structure de la table `images`-- CREATE TABLE `images` ( `id_appart` int(6) NOT NULL default '0', `plan` varchar(255) default '', `thumb1` varchar(255) default '', `photo1` varchar(255) default '', `thumb2` varchar(255) default '', `photo2` varchar(255) default '', `thumb3` varchar(255) default '', `photo3` varchar(255) default '', `thumb4` varchar(255) default '', `photo4` varchar(255) default '', `thumb5` varchar(255) default '', `photo5` varchar(255) default '', `thumb6` varchar(255) default '', `photo6` varchar(255) default '', `thumb7` varchar(255) default '', `photo7` varchar(255) default '', `thumb8` varchar(255) default '', `photo8` varchar(255) default '', `thumb9` varchar(255) default '', `photo9` varchar(255) default '', `thumb10` varchar(255) default '', `photo10` varchar(255) default '', `thumb11` varchar(255) default '', `photo11` varchar(255) default '', `thumb12` varchar(255) default '', `photo12` varchar(255) default '', `thumb13` varchar(255) default '', `photo13` varchar(255) default '', `thumb14` varchar(255) default '', `photo14` varchar(255) default '', `thumb15` varchar(255) default '', `photo15` varchar(255) default '', PRIMARY KEY (`id_appart`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;-- -- Contenu de la table `images`-- INSERT INTO `images` (`id_appart`, `plan`, `thumb1`, `photo1`, `thumb2`, `photo2`, `thumb3`, `photo3`, `thumb4`, `photo4`, `thumb5`, `photo5`, `thumb6`, `photo6`, `thumb7`, `photo7`, `thumb8`, `photo8`, `thumb9`, `photo9`, `thumb10`, `photo10`, `thumb11`, `photo11`, `thumb12`, `photo12`, `thumb13`, `photo13`, `thumb14`, `photo14`, `thumb15`, `photo15`) VALUES (1, 'plan/plan_beaujon.gif', 'photos/beaujon/thumbs/beaujon_01.jpg', 'photos/beaujon/beaujon_01.jpg', 'photos/beaujon/thumbs/beaujon_02jpg', 'photos/beaujon/beaujon_02jpg', 'photos/beaujon/thumbs/beaujon_03.jpg', 'photos/beaujon/beaujon_03.jpg', 'photos/beaujon/thumbs/beaujon_04.jpg', 'photos/beaujon/beaujon_04.jpg', 'photos/niel/thumbs/niel_05.jpg', 'photos/beaujon/beaujon_05.jpg', 'photos/beaujon/thumbs/beaujon_06.jpg', 'photos/beaujon/beaujon_06.jpg', 'photos/beaujon/thumbs/beaujon_07.jpg', 'photos/beaujon/beaujon_07.jpg', 'photos/beaujon/thumbs/beaujon_08.jpg', 'photos/beaujon/beaujon_08.jpg', 'photos/beaujon/thumbs/beaujon_09.jpg', 'photos/beaujon/beaujon_09.jpg', 'photos/beaujon/thumbs/beaujon_10.jpg', 'photos/beaujon/beaujon_10.jpg', 'photos/beaujon/thumbs/beaujon_11.jpg', 'photos/beaujon/beaujon_11.jpg', 'photos/beaujon/thumbs/beaujon_12.jpg', 'photos/beaujon/beaujon_12.jpg', 'photos/beaujon/thumbs/beaujon_13.jpg', 'photos/beaujon/beaujon_13.jpg', 'photos/beaujon/thumbs/beaujon_14.jpg', 'photos/beaujon/beaujon_14.jpg', 'photos/beaujon/thumbs/beaujon_15.jpg', 'photos/beaujon/beaujon_15.jpg'),(2, 'plan/plan_niel.gif', 'photos/niel/thumbs/niel_01.jpg', 'photos/niel/niel_01.jpg', 'photos/niel/thumbs/niel_02.jpg', 'photos/niel/niel_02.jpg', 'photos/niel/thumbs/niel_03.jpg', 'photos/niel/niel_03.jpg', 'photos/niel/thumbs/niel_04.jpg', 'photos/niel/niel_04.jpg', 'photos/niel/thumbs/niel_05.jpg', 'photos/niel/niel_05.jpg', 'photos/niel/thumbs/niel_06.jpg', 'photos/niel/niel_06.jpg', 'photos/niel/thumbs/niel_07.jpg', 'photos/niel/niel_07.jpg', 'photos/niel/thumbs/niel_08.jpg', 'photos/niel/niel_08.jpg', 'photos/niel/thumbs/niel_09.jpg', 'photos/niel/niel_09.jpg', 'photos/niel/thumbs/niel_10.jpg', 'photos/niel/niel_10.jpg', 'photos/niel/thumbs/niel_11.jpg', 'photos/niel/niel_11.jpg', 'photos/niel/thumbs/niel_12.jpg', 'photos/niel/niel_12.jpg', 'photos/niel/thumbs/niel_13.jpg', 'photos/niel/niel_13.jpg', 'photos/niel/thumbs/niel_14.jpg', 'photos/niel/niel_14.jpg', 'photos/niel/thumbs/niel_15.jpg', 'photos/niel/niel_15.jpg'),(3, 'plan/plan_square.gif', 'photos/square/thumbs/square_01.jpg', 'photos/square/square_01.jpg', 'photos/square/thumbs/square_02.jpg', 'photos/square/square_02.jpg', 'photos/square/thumbs/square_03.jpg', 'photos/square/square_03.jpg', 'photos/square/thumbs/square_04.jpg', 'photos/square/square_04.jpg', 'photos/square/thumbs/square_05.jpg', 'photos/square/square_05.jpg', 'photos/square/thumbs/square_06.jpg', 'photos/square/square_06.jpg', 'photos/square/thumbs/square_07.jpg', 'photos/square/square_07.jpg', 'photos/square/thumbs/square_08.jpg', 'photos/square/square_08.jpg', 'photos/square/thumbs/square_09.jpg', 'photos/square/square_09.jpg', 'photos/square/thumbs/square_10.jpg', 'photos/square/square_10.jpg', 'photos/square/thumbs/square_11.jpg', 'photos/square/square_11.jpg', 'photos/square/thumbs/square_12.jpg', 'photos/square/square_12.jpg', 'photos/square/thumbs/square_13.jpg', 'photos/square/square_13.jpg', 'photos/square/thumbs/square_14.jpg', 'photos/square/square_14.jpg', 'photos/square/thumbs/square_15.jpg', 'photos/square/square_15.jpg'),(4, 'plan/plan_sthonore.gif', 'photos/sthonore/thumbs/sthonore_01.jpg', 'photos/sthonore/sthonore_01.jpg', 'photos/sthonore/thumbs/sthonore_02.jpg', 'photos/sthonore/sthonore_02.jpg', 'photos/sthonore/thumbs/sthonore_03.jpg', 'photos/sthonore/sthonore_03.jpg', 'photos/sthonore/thumbs/sthonore_04.jpg', 'photos/sthonore/sthonore_04.jpg', 'photos/sthonore/thumbs/sthonore_05.jpg', 'photos/sthonore/sthonore_05.jpg', 'photos/sthonore/thumbs/sthonore_06.jpg', 'photos/sthonore/sthonore_06.jpg', 'photos/sthonore/thumbs/sthonore_07.jpg', 'photos/sthonore/sthonore_07.jpg', 'photos/sthonore/thumbs/sthonore_08.jpg', 'photos/sthonore/sthonore_08.jpg', 'photos/sthonore/thumbs/sthonore_09.jpg', 'photos/sthonore/sthonore_09.jpg', 'photos/sthonore/thumbs/sthonore_10.jpg', 'photos/sthonore/sthonore_10.jpg', 'photos/sthonore/thumbs/sthonore_11.jpg', 'photos/sthonore/sthonore_11.jpg', 'photos/sthonore/thumbs/sthonore_12.jpg', 'photos/sthonore/sthonore_12.jpg', 'photos/sthonore/thumbs/sthonore_13.jpg', 'photos/sthonore/sthonore_13.jpg', 'photos/sthonore/thumbs/sthonore_14.jpg', 'photos/sthonore/sthonore_14.jpg', 'photos/sthonore/thumbs/sthonore_15.jpg', 'photos/sthonore/sthonore_15.jpg');-- ---------------------------------------------------------- -- Structure de la table `nondispo`-- CREATE TABLE `nondispo` ( `id_appart` int(6) NOT NULL default '0', `date_debut` date NOT NULL default '0000-00-00', `date_fin` date NOT NULL default '0000-00-00', KEY `id` (`id_appart`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;-- -- Contenu de la table `nondispo`-- INSERT INTO `nondispo` (`id_appart`, `date_debut`, `date_fin`) VALUES (1, '2006-12-13', '2006-12-26'),(2, '0000-00-00', '0000-00-00'),(3, '0000-00-00', '0000-00-00'),(4, '0000-00-00', '0000-00-00');-- ---------------------------------------------------------- -- Structure de la table `prix_defaut`-- CREATE TABLE `prix_defaut` ( `id_appart` int(6) NOT NULL default '0', `prix_3j` int(4) default NULL, `prix_sem` int(4) default NULL, `prix_2sem` int(4) default NULL, `prix_mois` int(4) default NULL, PRIMARY KEY (`id_appart`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;-- -- Contenu de la table `prix_defaut`-- INSERT INTO `prix_defaut` (`id_appart`, `prix_3j`, `prix_sem`, `prix_2sem`, `prix_mois`) VALUES (1, 300, 500, 800, 1200),(2, 234, 545, 453, 1243),(3, 432, 434, 343, 435),(4, 543, 545, 443, 463),(10, 0, 0, 0, 0),(11, 0, 0, 0, 0);-- ---------------------------------------------------------- -- Structure de la table `prix_saisons`-- CREATE TABLE `prix_saisons` ( `id_appart` int(6) NOT NULL default '0', `id_saison` int(3) NOT NULL default '0', `prix_3j` int(4) default NULL, `prix_sem` int(4) default NULL, `prix_2sem` int(4) default NULL, `prix_mois` int(4) default NULL, PRIMARY KEY (`id_appart`,`id_saison`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;-- -- Contenu de la table `prix_saisons`-- INSERT INTO `prix_saisons` (`id_appart`, `id_saison`, `prix_3j`, `prix_sem`, `prix_2sem`, `prix_mois`) VALUES (3, 1, 400, 700, 1300, 2400);-- ---------------------------------------------------------- -- Structure de la table `promotions`-- CREATE TABLE `promotions` ( `id_promo` int(6) NOT NULL default '0', `id_appart` int(6) NOT NULL auto_increment, `date_debut` date NOT NULL default '0000-00-00', `date_fin` date NOT NULL default '0000-00-00', PRIMARY KEY (`id_promo`,`id_appart`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;-- -- Contenu de la table `promotions`-- INSERT INTO `promotions` (`id_promo`, `id_appart`, `date_debut`, `date_fin`) VALUES (1, 1, '2007-04-06', '2007-04-09'),(10, 2, '2007-03-03', '2007-03-09'),(7, 3, '0000-00-00', '0000-00-00'),(2, 4, '0000-00-00', '0000-00-00');-- ---------------------------------------------------------- -- Structure de la table `proprietes`-- CREATE TABLE `proprietes` ( `id_appart` int(6) NOT NULL auto_increment, `nom_propriete` varchar(30) NOT NULL default '', `icone1` varchar(50) NOT NULL default '', `icone2` varchar(50) NOT NULL default '', `icone3` varchar(50) NOT NULL default '', `icone4` varchar(50) NOT NULL default '', `icone5` varchar(50) NOT NULL default '', `icone6` varchar(50) NOT NULL default '', `icone7` varchar(50) NOT NULL default '', `icone8` varchar(50) NOT NULL default '', `icone9` varchar(50) NOT NULL default '', `icone10` varchar(50) NOT NULL default '', `icone11` varchar(50) NOT NULL default '', `icone12` varchar(50) NOT NULL default '', `icone13` varchar(50) NOT NULL default '', `icone14` varchar(50) NOT NULL default '', `icone15` varchar(50) NOT NULL default '', PRIMARY KEY (`id_appart`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=15;-- -- Contenu de la table `proprietes`-- INSERT INTO `proprietes` (`id_appart`, `nom_propriete`, `icone1`, `icone2`, `icone3`, `icone4`, `icone5`, `icone6`, `icone7`, `icone8`, `icone9`, `icone10`, `icone11`, `icone12`, `icone13`, `icone14`, `icone15`) VALUES (1, 'asc', 'icones/asc.gif', '', '', '', '', '', '', '', '', '', '', '', '', '', ''),(2, 'bain', 'icones/bain.gif', '', '', '', '', '', '', '', '', '', '', '', '', '', ''),(3, 'clit', 'icones/client.gif', '', '', '', '', '', '', '', '', '', '', '', '', '', ''),(4, 'douche', 'icones/douche.gif', '', '', '', '', '', '', '', '', '', '', '', '', '', ''),(5, 'dvd', 'icones/dvd.gif', '', '', '', '', '', '', '', '', '', '', '', '', '', ''),(6, 'hom21', 'icones/hom21.gif', '', '', '', '', '', '', '', '', '', '', '', '', '', ''),(7, 'hom2', 'icones/hom2.gif', '', '', '', '', '', '', '', '', '', '', '', '', '', ''),(8, 'lav', 'icones/lav.gif', '', '', '', '', '', '', '', '', '', '', '', '', '', ''),(9, 'lit', 'icones/lit.gif', '', '', '', '', '', '', '', '', '', '', '', '', '', ''),(10, 'sat', 'icones/sat.gif', '', '', '', '', '', '', '', '', '', '', '', '', '', ''),(11, 'sono', 'icones/sono.gif', '', '', '', '', '', '', '', '', '', '', '', '', '', ''),(12, 'tel', 'icones/tel.gif', '', '', '', '', '', '', '', '', '', '', '', '', '', ''),(13, 'tv', 'icones/tv.gif', '', '', '', '', '', '', '', '', '', '', '', '', '', ''),(14, 'vaiss', 'icones/vaiss.gif', '', '', '', '', '', '', '', '', '', '', '', '', '', '');-- ---------------------------------------------------------- -- Structure de la table `proprietes_appart`-- CREATE TABLE `proprietes_appart` ( `id_appart` int(6) NOT NULL default '0', `id_propriete` int(3) NOT NULL default '0', PRIMARY KEY (`id_appart`,`id_propriete`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;-- -- Contenu de la table `proprietes_appart`-- INSERT INTO `proprietes_appart` (`id_appart`, `id_propriete`) VALUES (1, 1),(2, 3),(3, 0),(4, 0);-- ---------------------------------------------------------- -- Structure de la table `saisons`-- CREATE TABLE `saisons` ( `id_appart` int(3) NOT NULL auto_increment, `nom` varchar(30) NOT NULL default '', `date_debut` date default NULL, `date_fin` date default NULL, PRIMARY KEY (`id_appart`), UNIQUE KEY `nom` (`nom`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2;-- -- Contenu de la table `saisons`-- INSERT INTO `saisons` (`id_appart`, `nom`, `date_debut`, `date_fin`) VALUES (1, 'Sommet des Pas Perdus', '2007-01-03', '2007-01-06'); **EDIT Modérateur (TheRec)** Merci d'utiliser la balise CODEBOX à la place de CODE pour présenter un code long.
TheRec Posté 18 Février 2007 Posté 18 Février 2007 Mes excuses, j'ai oublié de te préciser qu'il fallait ajouter le contraintes à la jointure (en mettant plusieurs noms de table dans la requête cela a indiqué à MySQL que ces tables sont liées, sans contrainte MySQL fait un produit cartésien de toutes les table) à ta requête. Donc tu dois ajouter à ta condition actuelle toutes les clés qui lient ces tables : $query_DetailRS1 = "SELECT appartements.id, appartements.nom, appartements.ville, appartements.arrondissement, appartements.quartier, description.id_appart, description.superficie, description.equipement, images.thumb1, images.photo1, images.thumb2, images.photo2 FROM appartements, description, images, commentaires WHERE appartements.id = $recordID AND appartements.id = description.id_appart AND appartements.id = images.id_appart AND appartements.id = commentaires.id_appart ORDER BY nom ASC";
subrenaud Posté 18 Février 2007 Auteur Posté 18 Février 2007 Grand merci Grand Rec. J'essaye ça ce soir et je me permettrai de donner des nouvelles. Ok pour le codebox.
subrenaud Posté 19 Février 2007 Auteur Posté 19 Février 2007 Salut The Rec, (et les autres !) Hier tu m'as bien aidé pour mon master/detail et je t'en remercie encore. Les données sont bien transmises au ID. Voilà que je reprends les travaux ce soir et je n'arrive plus à afficher les données de plus d'une table dans ma page Master (coordonnees.php). Pour l'exemple, on va dire que j'ai donc besoin d'afficher toutes les données des tables Appartements et Description dans le Master. Ça marchait hier et ça ne marche plus... Qu'est-ce que j'ai mal fait? Défait? Ma db est toujours la même. À forces de petites explications je vais finir par comprendre... page coordonnees.php (Master): <?php require_once('../Connections/PHPMySQLconn.php'); ?><?php$currentPage = $_SERVER["PHP_SELF"];$maxRows_rsBisCoordonnees = 4;$pageNum_rsBisCoordonnees = 0;if (isset($_GET['pageNum_rsBisCoordonnees'])) { $pageNum_rsBisCoordonnees = $_GET['pageNum_rsBisCoordonnees'];}$startRow_rsBisCoordonnees = $pageNum_rsBisCoordonnees * $maxRows_rsBisCoordonnees;mysql_select_db($database_PHPMySQLconn, $PHPMySQLconn);$query_rsBisCoordonnees = "SELECT * FROM appartements ORDER BY nom ASC";$query_limit_rsBisCoordonnees = sprintf("%s LIMIT %d, %d", $query_rsBisCoordonnees, $startRow_rsBisCoordonnees, $maxRows_rsBisCoordonnees);$rsBisCoordonnees = mysql_query($query_limit_rsBisCoordonnees, $PHPMySQLconn) or die(mysql_error());$row_rsBisCoordonnees = mysql_fetch_assoc($rsBisCoordonnees);if (isset($_GET['totalRows_rsBisCoordonnees'])) { $totalRows_rsBisCoordonnees = $_GET['totalRows_rsBisCoordonnees'];} else { $all_rsBisCoordonnees = mysql_query($query_rsBisCoordonnees); $totalRows_rsBisCoordonnees = mysql_num_rows($all_rsBisCoordonnees);}$totalPages_rsBisCoordonnees = ceil($totalRows_rsBisCoordonnees/$maxRows_rsBisCoordonnees)-1;$queryString_rsBisCoordonnees = "";if (!empty($_SERVER['QUERY_STRING'])) { $params = explode("&", $_SERVER['QUERY_STRING']); $newParams = array(); foreach ($params as $param) { if (stristr($param, "pageNum_rsBisCoordonnees") == false && stristr($param, "totalRows_rsBisCoordonnees") == false) { array_push($newParams, $param); } } if (count($newParams) != 0) { $queryString_rsBisCoordonnees = "&" . htmlentities(implode("&", $newParams)); }}$queryString_rsBisCoordonnees = sprintf("&totalRows_rsBisCoordonnees=%d%s", $totalRows_rsBisCoordonnees, $queryString_rsBisCoordonnees);?> page fiche.php (details): <?php require_once('../Connections/PHPMySQLconn.php'); ?><?php$maxRows_DetailRS1 = 10;$pageNum_DetailRS1 = 0;if (isset($_GET['pageNum_DetailRS1'])) {$pageNum_DetailRS1 = $_GET['pageNum_DetailRS1'];}$startRow_DetailRS1 = $pageNum_DetailRS1 * $maxRows_DetailRS1;mysql_select_db($database_PHPMySQLconn, $PHPMySQLconn);$appartementsID = $_GET['appartementsID'];$query_DetailRS1 = "SELECT * FROM appartements WHERE id = $appartementsID ORDER BY nom ASC";$query_limit_DetailRS1 = sprintf("%s LIMIT %d, %d", $query_DetailRS1, $startRow_DetailRS1, $maxRows_DetailRS1);$DetailRS1 = mysql_query($query_limit_DetailRS1, $PHPMySQLconn) or die(mysql_error());$row_DetailRS1 = mysql_fetch_assoc($DetailRS1);if (isset($_GET['totalRows_DetailRS1'])) {$totalRows_DetailRS1 = $_GET['totalRows_DetailRS1'];} else {$all_DetailRS1 = mysql_query($query_DetailRS1);$totalRows_DetailRS1 = mysql_num_rows($all_DetailRS1);}$totalPages_DetailRS1 = ceil($totalRows_DetailRS1/$maxRows_DetailRS1)-1;$maxRows_DetailRS1 = 4;$pageNum_DetailRS1 = 0;if (isset($_GET['pageNum_DetailRS1'])) {$pageNum_DetailRS1 = $_GET['pageNum_DetailRS1'];}$startRow_DetailRS1 = $pageNum_DetailRS1 * $maxRows_DetailRS1;mysql_select_db($database_PHPMySQLconn, $PHPMySQLconn);$appartementsID = $_GET['appartementsID'];$query_DetailRS1 = "SELECT appartements.id, appartements.nom, appartements.ville, appartements.arrondissement, appartements.quartier, appartements.cote, description.id_appart, description.superficie, description.equipement, images.thumb1, images.photo1, images.thumb2, images.photo2 FROM appartements, description, images, commentaires WHERE appartements.id = $appartementsID AND appartements.id = description.id_appart AND appartements.id = images.id_appart AND appartements.id = commentaires.id_appart ORDER BY nom ASC";$query_limit_DetailRS1 = sprintf("%s LIMIT %d, %d", $query_DetailRS1, $startRow_DetailRS1, $maxRows_DetailRS1);$DetailRS1 = mysql_query($query_limit_DetailRS1, $PHPMySQLconn) or die(mysql_error());$row_DetailRS1 = mysql_fetch_assoc($DetailRS1);if (isset($_GET['totalRows_DetailRS1'])) {$totalRows_DetailRS1 = $_GET['totalRows_DetailRS1'];} else {$all_DetailRS1 = mysql_query($query_DetailRS1);$totalRows_DetailRS1 = mysql_num_rows($all_DetailRS1);}$totalPages_DetailRS1 = ceil($totalRows_DetailRS1/$maxRows_DetailRS1)-1;?> Même si la page Fiche fait son travail, j'ai un message d'erreur quand je l'ouvre dans le navigateur: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY nom ASC LIMIT 0, 10' at line 1
subrenaud Posté 19 Février 2007 Auteur Posté 19 Février 2007 Bonjour, J'ai finalement fait une requete avec des jointures internes. J'arrive à afficher les données de toutes les tables nécessaires dans mon Master. Mais ! Cette requête ne rapporte que les données de ID 3. Les autres ID, 1, 2 et 4 n'apparaissent plus dans la liste de ma page Master. Est-ce qu'un WHERE pourrait me permettre de tout afficher ? Merci ! <?php require_once('../Connections/PHPMySQLconn.php'); ?><?php$currentPage = $_SERVER["PHP_SELF"];$maxRows_rsBisCoordonnees = 4;$pageNum_rsBisCoordonnees = 0;if (isset($_GET['pageNum_rsBisCoordonnees'])) { $pageNum_rsBisCoordonnees = $_GET['pageNum_rsBisCoordonnees'];}$startRow_rsBisCoordonnees = $pageNum_rsBisCoordonnees * $maxRows_rsBisCoordonnees;mysql_select_db($database_PHPMySQLconn, $PHPMySQLconn);$query_rsBisCoordonnees = "SELECT appartements.id, appartements.nom, appartements.ville, appartements.arrondissement, appartements.quartier, appartements.cote, description.superficie, description.courte_desc, description.description, description.equipement, description.cadre, description.environs, description.transport, description.metro, description.avertissement, commentaires.date, commentaires.titre, commentaires.auteur, commentaires.id_commentaire, commentaires.pays, images.plan, images.thumb1, images.thumb2, images.thumb3, images.thumb4, images.thumb5, images.thumb6, images.thumb7, images.thumb8, images.thumb9, images.thumb10, images.thumb11, images.thumb12, images.thumb13, images.thumb14, images.thumb15, images.photo1, images.photo2, images.photo3, images.photo4, images.photo5, images.photo6, images.photo7, images.photo8, images.photo9, images.photo10, images.photo11, images.photo12, images.photo13, images.photo14, images.photo15, images.flash1, images.flash2, images.flash3, nondispo.res_date_debut, nondispo.res_date_fin, prix_defaut.prix_3j, prix_defaut.prix_sem, prix_defaut.prix_2sem, prix_defaut.prix_mois, prix_saisons.id_saison, prix_saisons.prix_3j, prix_saisons.prix_sem, prix_saisons.prix_2sem, prix_saisons.prix_mois, promotions.id_promo, promotions.prom_date_debut, promotions.prom_date_fin, proprietes.nom_propriete, proprietes.icone1, proprietes.icone2, proprietes.icone3, proprietes.icone4, proprietes.icone5, proprietes.icone6, proprietes.icone7, proprietes.icone8, proprietes.icone9, proprietes.icone10, proprietes.icone11, proprietes.icone12, proprietes.icone13, proprietes.icone14, proprietes.icone15, proprietes_appart.id_propriete FROM appartements INNER JOIN description ON appartements.id = description.id_appart INNER JOIN commentaires ON appartements.id = commentaires.id_appart INNER JOIN images ON appartements.id = images.id_appart INNER JOIN nondispo ON appartements.id = nondispo.id_appart INNER JOIN prix_defaut ON appartements.id = prix_defaut.id_appart INNER JOIN prix_saisons ON appartements.id = prix_saisons.id_appart INNER JOIN promotions ON appartements.id = promotions.id_appart INNER JOIN proprietes ON appartements.id = proprietes.id_appart INNER JOIN proprietes_appart ON appartements.id = proprietes_appart.id_appart";$query_limit_rsBisCoordonnees = sprintf("%s LIMIT %d, %d", $query_rsBisCoordonnees, $startRow_rsBisCoordonnees, $maxRows_rsBisCoordonnees);$rsBisCoordonnees = mysql_query($query_limit_rsBisCoordonnees, $PHPMySQLconn) or die(mysql_error());$row_rsBisCoordonnees = mysql_fetch_assoc($rsBisCoordonnees);if (isset($_GET['totalRows_rsBisCoordonnees'])) { $totalRows_rsBisCoordonnees = $_GET['totalRows_rsBisCoordonnees'];} else { $all_rsBisCoordonnees = mysql_query($query_rsBisCoordonnees); $totalRows_rsBisCoordonnees = mysql_num_rows($all_rsBisCoordonnees);}$totalPages_rsBisCoordonnees = ceil($totalRows_rsBisCoordonnees/$maxRows_rsBisCoordonnees)-1;$queryString_rsBisCoordonnees = "";if (!empty($_SERVER['QUERY_STRING'])) { $params = explode("&", $_SERVER['QUERY_STRING']); $newParams = array(); foreach ($params as $param) { if (stristr($param, "pageNum_rsBisCoordonnees") == false && stristr($param, "totalRows_rsBisCoordonnees") == false) { array_push($newParams, $param); } } if (count($newParams) != 0) { $queryString_rsBisCoordonnees = "&" . htmlentities(implode("&", $newParams)); }}$queryString_rsBisCoordonnees = sprintf("&totalRows_rsBisCoordonnees=%d%s", $totalRows_rsBisCoordonnees, $queryString_rsBisCoordonnees);?>
TheRec Posté 19 Février 2007 Posté 19 Février 2007 Les jointures internes ([iNNER] JOIN) ne récupèrent que les enregistrement ayant des correspondances dans les tables qui sont jointes. Dans ton cas les jointure sont toutes internes et donc seul les enregistrement ayant une correspondance dans chaque table présente dans ta requête seront retourné Je suppose que c'est le cas de l'enregistrement portant l'id "3" Pour faire ce que tu souhaites tu devras recourir à l'usage des jointures externes (OUTER JOIN) qui permettent d'obtenir également les éléments de table (celle venant indiquée dans la clause FROM) n'ayant pas de correspondance dans la ou les tables jointes. Plus précisément, tu vas être amené à utiliser LEFT OUTER JOIN dans ce cas.
subrenaud Posté 20 Février 2007 Auteur Posté 20 Février 2007 Super ! Ça marche très bien. On peut dire que l'affaire est résolue.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant