- Drux,
Bonjour tout le monde,
Pour le compte d’un projet web côté back-end, nous utilisons le PHP 7.4 et MySQL 8.X, voici la structure d’une partie de la BDD
CREATE TABLE `disponibilite` (
`id` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`categorie_id` int DEFAULT NULL,
`etudiant_id` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`jour` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`heure` int DEFAULT NULL,
`minute` int DEFAULT NULL,
`debut` date DEFAULT NULL,
`fin` date DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `IDX_2CBACE2FBCF5E72D` (`categorie_id`),
KEY `IDX_2CBACE2FDDEAB1A3` (`etudiant_id`),
CONSTRAINT `FK_2CBACE2FBCF5E72D` FOREIGN KEY (`categorie_id`) REFERENCES `categorie_disponibilite` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `FK_2CBACE2FDDEAB1A3` FOREIGN KEY (`etudiant_id`) REFERENCES `etudiant` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
CREATE TABLE `categorie_disponibilite` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
CREATE TABLE `etudiant` (
`id` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`sexe_id` int DEFAULT NULL,
`ville_id` int DEFAULT NULL,
`obtention_bac_id` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`nom` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`prenom` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`telephone` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`date_naissance` date DEFAULT NULL,
`mdp` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`photo` longtext COLLATE utf8mb4_unicode_ci,
`cv` longtext COLLATE utf8mb4_unicode_ci,
`formation_id` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`universite_id` int DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `IDX_717E22E3448F3B3C` (`sexe_id`),
KEY `IDX_717E22E3A73F0036` (`ville_id`),
KEY `IDX_717E22E331066095` (`obtention_bac_id`),
KEY `IDX_717E22E35200282E` (`formation_id`),
KEY `IDX_717E22E32A52F05F` (`universite_id`) /*!80000 INVISIBLE */,
KEY `FK_717E22E32A52F05F_idx` (`universite_id`),
KEY `IDX_717E22E32A52F05F_idx` (`universite_id`),
CONSTRAINT `FK_717E22E32A52F05F` FOREIGN KEY (`universite_id`) REFERENCES `universite` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `FK_717E22E331066095` FOREIGN KEY (`obtention_bac_id`) REFERENCES `otention_bac` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `FK_717E22E3448F3B3C` FOREIGN KEY (`sexe_id`) REFERENCES `sexe` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `FK_717E22E35200282E` FOREIGN KEY (`formation_id`) REFERENCES `formation` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `FK_717E22E3A73F0036` FOREIGN KEY (`ville_id`) REFERENCES `ville` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
CREATE TABLE `demande` (
`id` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`etudiant_id` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`date` datetime NOT NULL,
`titre` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`contenu` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
`ville_id` int DEFAULT NULL,
`type_job_id` int DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `IDX_2694D7A5DDEAB1A3` (`etudiant_id`),
KEY `demande_ville_idx` (`ville_id`),
KEY `demande_type_job_idx` (`type_job_id`),
CONSTRAINT `demande_type_job` FOREIGN KEY (`type_job_id`) REFERENCES `type_job` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `demande_ville` FOREIGN KEY (`ville_id`) REFERENCES `ville` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `FK_2694D7A5DDEAB1A3` FOREIGN KEY (`etudiant_id`) REFERENCES `etudiant` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
Voici les cardinalités:
- un ETUDIANT peut avoir plusieurs disponibilités (peut importe la catégorie de la disponibilite)
- une DISPONIBILITE peut appartenir à un ou plusieurs ETUDIANT
- un étudiant peut avoir une ou plusieurs DEMANDE
- une DEMANDE appartient à un seul ETUDIANT
mais lors que j’essaie de récupérer toutes les DEMANDES en fonction d’une période, cela mes récupère les données doublements:
SELECT DE.*, ET.photo AS photo_editeur, CONCAT(ET.prenom, ' ', ET.nom) AS nom_editeur, DI.debut, DI.fin
FROM demande DE
INNER JOIN etudiant ET ON ET.id = DE.etudiant_id
INNER JOIN disponibilite DI ON DI.etudiant_id = DE.etudiant_id
WHERE DI.debut < CAST('2022-12-31' AS DATETIME) AND DI.fin > CAST('2022-09-11' AS DATETIME) AND DI.categorie_id=2
Note: Pouvez-vous m’aider car je veux récupérer les données en fonction de la disponibilité de l’étudiant
+0
-0