La table reliée n'affiche pas les données

Paulo30500's profile image Paulo30500 posted 5 years ago in General Permalink

Bonjour, J'ai une table "Lecteurs" avec id, nom, prenom, ville... Le champ "ville" est relié à une autre table "Villes" contenant les 36000 communes de France. Pourquoi la liaison ne se fait pas correctement ? Pourquoi le champ "ville" de ma table "Lecteurs" n'affiche pas correctement l'id et le nom de la ville correspondant de la table "Villes" ? Trop d'enregistrements dans la table "Villes" ? La liaison est correcte car tout s'affiche très bien dans DBeaver Community... mais pas dans HeidiSQL !!! Je joins mon fichier code "essai.sql" Qui a une idée ? Merci d'avance...

1 attachment(s):
ansgar's profile image ansgar posted 5 years ago Permalink

Hey, you are posting the same question a second time, although I already replied to your first one. Please go there and post the CREATE code from both tables.

Paulo30500's profile image Paulo30500 posted 5 years ago Permalink

Mon code :

-- --------------------------------------------------------
-- Hôte :                        127.0.0.1
-- Version du serveur:           8.0.17 - MySQL Community Server - GPL
-- SE du serveur:                Win64
-- HeidiSQL Version:             10.2.0.5694
-- --------------------------------------------------------

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!50503 SET NAMES utf8mb4 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;


-- Listage de la structure de la base pour essai
CREATE DATABASE IF NOT EXISTS `essai` /*!40100 DEFAULT CHARACTER SET utf8 */ /*!80016 DEFAULT ENCRYPTION='N' */;
USE `essai`;

-- Listage de la structure de la table essai. communes
CREATE TABLE IF NOT EXISTS `communes` (
  `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `commune` varchar(150) NOT NULL,
  `code` varchar(5) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=365 DEFAULT CHARSET=utf8 COMMENT='Toutes les villes du Gard...';

-- Les données exportées n'étaient pas sélectionnées.

-- Listage de la structure de la table essai. comptabilite
CREATE TABLE IF NOT EXISTS `comptabilite` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `lecteur` smallint(5) unsigned NOT NULL,
  `annee` year(4) DEFAULT '2000',
  `adhesion` decimal(10,2) DEFAULT NULL,
  `cotisation` decimal(10,2) DEFAULT NULL,
  `date_paiement` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `comptabilite_fk` (`lecteur`),
  CONSTRAINT `comptabilite_fk` FOREIGN KEY (`lecteur`) REFERENCES `lecteurs` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='Gestion des adhésions et des cotisations annuelles';

-- Les données exportées n'étaient pas sélectionnées.

-- Listage de la structure de la table essai. departement
CREATE TABLE IF NOT EXISTS `departement` (
  `departement_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `departement_nom` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `departement_code` varchar(3) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `chef_lieu` varchar(150) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  PRIMARY KEY (`departement_id`),
  KEY `departement_code` (`departement_code`)
) ENGINE=InnoDB AUTO_INCREMENT=102 DEFAULT CHARSET=utf8 COMMENT='Tous les départements de France';

-- Les données exportées n'étaient pas sélectionnées.

-- Listage de la structure de la table essai. lecteurs
CREATE TABLE IF NOT EXISTS `lecteurs` (
  `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `inscription` date NOT NULL,
  `civilite` enum('Mr','Mme','Melle') DEFAULT NULL,
  `nom` char(50) NOT NULL DEFAULT '',
  `prenom` char(50) NOT NULL DEFAULT '',
  `profession` tinyint(3) unsigned NOT NULL,
  `adresse` char(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `ville` mediumint(8) unsigned NOT NULL,
  `departement` smallint(5) unsigned NOT NULL,
  `pays` smallint(5) unsigned NOT NULL,
  `situation` set('Célibataire','Divorcé(e)','Marié(e)','Pacsé(e)') CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `commune` smallint(5) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `lecteurs_fk_3` (`pays`),
  KEY `lecteurs_fk_4` (`departement`),
  KEY `lecteurs_fk_5` (`commune`),
  KEY `lecteurs_fk_1` (`profession`),
  KEY `lecteurs_fk_2` (`ville`),
  CONSTRAINT `lecteurs_fk_1` FOREIGN KEY (`profession`) REFERENCES `professions` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `lecteurs_fk_2` FOREIGN KEY (`ville`) REFERENCES `villes` (`ville_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `lecteurs_fk_3` FOREIGN KEY (`pays`) REFERENCES `pays` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `lecteurs_fk_4` FOREIGN KEY (`departement`) REFERENCES `departement` (`departement_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `lecteurs_fk_5` FOREIGN KEY (`commune`) REFERENCES `communes` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 COMMENT='Liste des lecteurs...';

-- Les données exportées n'étaient pas sélectionnées.

-- Listage de la structure de la table essai. pays
CREATE TABLE IF NOT EXISTS `pays` (
  `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `nom_fr_fr` varchar(45) NOT NULL,
  `code` int(3) NOT NULL,
  `alpha2` varchar(2) NOT NULL,
  `alpha3` varchar(3) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `alpha2` (`alpha2`),
  UNIQUE KEY `alpha3` (`alpha3`),
  UNIQUE KEY `code_unique` (`code`)
) ENGINE=InnoDB AUTO_INCREMENT=242 DEFAULT CHARSET=utf8 COMMENT='Tous les pays du monde';

-- Les données exportées n'étaient pas sélectionnées.

-- Listage de la structure de la table essai. professions
CREATE TABLE IF NOT EXISTS `professions` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `profession` char(50) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  UNIQUE KEY `profession` (`profession`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;

-- Les données exportées n'étaient pas sélectionnées.

-- Listage de la structure de la table essai. villes
CREATE TABLE IF NOT EXISTS `villes` (
  `ville_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `ville_nom_reel` varchar(100) DEFAULT NULL,
  `ville_departement` varchar(3) DEFAULT NULL,
  `ville_nom_soundex` varchar(20) DEFAULT NULL,
  `ville_nom_metaphone` varchar(22) DEFAULT NULL,
  `ville_code_postal` varchar(255) DEFAULT NULL,
  `ville_commune` varchar(3) DEFAULT NULL,
  `ville_code_commune` varchar(5) NOT NULL,
  `ville_arrondissement` smallint(3) unsigned DEFAULT NULL,
  `ville_canton` varchar(4) DEFAULT NULL,
  `ville_amdi` smallint(5) unsigned DEFAULT NULL,
  `ville_population_2010` mediumint(11) unsigned DEFAULT NULL,
  `ville_population_1999` mediumint(11) unsigned DEFAULT NULL,
  `ville_population_2012` mediumint(10) unsigned DEFAULT NULL COMMENT 'approximatif',
  `ville_densite_2010` int(11) DEFAULT NULL,
  `ville_surface` float DEFAULT NULL,
  `ville_longitude_deg` float DEFAULT NULL,
  `ville_latitude_deg` float DEFAULT NULL,
  `ville_longitude_grd` varchar(9) DEFAULT NULL,
  `ville_latitude_grd` varchar(8) DEFAULT NULL,
  `ville_longitude_dms` varchar(9) DEFAULT NULL,
  `ville_latitude_dms` varchar(8) DEFAULT NULL,
  `ville_zmin` mediumint(4) DEFAULT NULL,
  `ville_zmax` mediumint(4) DEFAULT NULL,
  PRIMARY KEY (`ville_id`),
  UNIQUE KEY `ville_code_commune_2` (`ville_code_commune`),
  KEY `ville_departement` (`ville_departement`),
  KEY `ville_nom_reel` (`ville_nom_reel`),
  KEY `ville_code_commune` (`ville_code_commune`),
  KEY `ville_code_postal` (`ville_code_postal`),
  KEY `ville_longitude_latitude_deg` (`ville_longitude_deg`,`ville_latitude_deg`),
  KEY `ville_nom_soundex` (`ville_nom_soundex`),
  KEY `ville_nom_metaphone` (`ville_nom_metaphone`),
  KEY `ville_population_2010` (`ville_population_2010`)
) ENGINE=InnoDB AUTO_INCREMENT=36831 DEFAULT CHARSET=utf8 COMMENT='Toutes les villes de France';

-- Les données exportées n'étaient pas sélectionnées.

/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
ansgar's profile image ansgar posted 5 years ago Permalink

Ok, I imported your script now, and inserted one row in each of the contained tables, so I could finally post one row in the lecteurs table. I see the foreign key is doing what it's supposed to do in HeidiSQL:

Description

Probably you expected something different? But that's how HeidiSQL shows foreign key values.

Paulo30500's profile image Paulo30500 posted 5 years ago Permalink

HeidiSQL affiche bien de cette façon dans la table des Lecteurs les valeurs des clés étrangères des tables communes, pays, professions, comptabilite... SAUF pour la table des villes où on ne peut pas choisir un id de ville et son nom... Si on saisit un numéro de ville au hasard, ce sera ce numéro qui sera affiché mais jamais le nom de la ville à côté... De cette façon, c'est donc très difficile de sélectionner une ville parmi les 36831 possibilités de villes de France !!! A moins de les connaître par coeur... Ce qui est loin d'être mon cas... Tout marche pour toutes les autres clés étrangères mais pas pour la clé étrangère des villes... Tout ça est très bizarre pour moi !!! HeidiSQL accepte-t-il des fichiers longs de 36831 lignes ? En principe oui très certainement, et même je pense des fichiers avec des millions de lignes non ??? Alors pourquoi cette bizarrerie ???

ansgar's profile image ansgar posted 5 years ago Permalink

That drop down is activated for tables with a maximum of 1000 rows. So maybe that's the problem here. There is no way to change that limit on the users side, currently. But you could file a feature request in the bugtracker if you want to have that limit customizable. That way you could change it to let's say 100000 which should display all of your villes rows.

Please login to leave a reply, or register at first.