Selectionner plusieurs champs de plusieurs tables
silverboy95
Messages postés
14
Date d'inscription
Statut
Membre
Dernière intervention
-
max83000 Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
max83000 Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
J'ai un problème avec une requete sql j'arrive pas a trouver la bonne requête sure cette question si vous pourriez m'aidez au plus rapidement ...
Merci a tous
"Pour chaque fiche de frais, afficher les nom et prénom du visiteur, l'année, le mois et les 4 montants de ligne de frais."
Et ici la base de donnée :
EDIT : Ajout des balises de code
"</signature>
Merci a tous
"Pour chaque fiche de frais, afficher les nom et prénom du visiteur, l'année, le mois et les 4 montants de ligne de frais."
Et ici la base de donnée :
"CREATE DATABASE gsbfrais; USE gsbfrais; SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; <signature>-- Suppression préalable des tables si nécessaire -- DROP TABLE IF EXISTS `lignefraishorsforfait`; DROP TABLE IF EXISTS `lignefraisforfait`; DROP TABLE IF EXISTS `fichefrais`; DROP TABLE IF EXISTS `visiteur`; DROP TABLE IF EXISTS `etat`; DROP TABLE IF EXISTS `fraisforfait`; -- -- Structure de la table `fraisforfait` -- CREATE TABLE IF NOT EXISTS `fraisforfait` ( `id` char(3) NOT NULL, `libelle` char(20) DEFAULT NULL, `montant` decimal(5,2) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB; -- -------------------------------------------------------- -- -- Structure de la table `etat` -- CREATE TABLE IF NOT EXISTS `etat` ( `id` char(2) NOT NULL, `libelle` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB; -- -------------------------------------------------------- -- -- Structure de la table `visiteur` -- CREATE TABLE IF NOT EXISTS `visiteur` ( `id` char(4) NOT NULL, `nom` char(30) DEFAULT NULL, `prenom` char(30) DEFAULT NULL, `login` char(20) DEFAULT NULL, `mdp` char(20) DEFAULT NULL, `adresse` char(30) DEFAULT NULL, `cp` char(5) DEFAULT NULL, `ville` char(30) DEFAULT NULL, `dateEmbauche` date DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB; -- -------------------------------------------------------- -- -- Structure de la table `fichefrais` -- CREATE TABLE IF NOT EXISTS `fichefrais` ( `idVisiteur` char(4) NOT NULL, `mois` char(6) NOT NULL, `nbJustificatifs` int(11) DEFAULT NULL, `montantValide` decimal(10,2) DEFAULT NULL, `dateModif` date DEFAULT NULL, `idEtat` char(2) DEFAULT 'CR', PRIMARY KEY (`idVisiteur`,`mois`), FOREIGN KEY (`idEtat`) REFERENCES etat(`id`), FOREIGN KEY (`idVisiteur`) REFERENCES visiteur(`id`) ) ENGINE=InnoDB; -- -------------------------------------------------------- -- -- Structure de la table `lignefraisforfait` -- CREATE TABLE IF NOT EXISTS `lignefraisforfait` ( `idVisiteur` char(4) NOT NULL, `mois` char(6) NOT NULL, `idFraisForfait` char(3) NOT NULL, `quantite` int(11) DEFAULT NULL, PRIMARY KEY (`idVisiteur`,`mois`,`idFraisForfait`), FOREIGN KEY (`idVisiteur`, `mois`) REFERENCES fichefrais(`idVisiteur`, `mois`), FOREIGN KEY (`idFraisForfait`) REFERENCES fraisforfait(`id`) ) ENGINE=InnoDB; -- -------------------------------------------------------- -- -- Structure de la table `lignefraishorsforfait` -- Rajout de l'état de remboursement car il peut être remboursé jusqu'à 1 an après -- CREATE TABLE IF NOT EXISTS `lignefraishorsforfait` ( `id` int(11) NOT NULL auto_increment, `idVisiteur` char(4) NOT NULL, `mois` char(6) NOT NULL, `libelle` varchar(100) DEFAULT NULL, `date` date DEFAULT NULL, `montant` decimal(10,2) DEFAULT NULL, `idEtat` char(2) DEFAULT 'CR', PRIMARY KEY (id), FOREIGN KEY (`idVisiteur`, `mois`) REFERENCES fichefrais(`idVisiteur`, `mois`), FOREIGN KEY (`idEtat`) REFERENCES etat(`id`) ) ENGINE=InnoDB;
EDIT : Ajout des balises de code
"</signature>
A voir également:
- Selectionner plusieurs champs de plusieurs tables
- Tables des matières word - Guide
- Selectionner texte sur pdf - Guide
- Comment sélectionner un message sur whatsapp pour y répondre - Guide
- Tables ascii - Guide
- Vba excel sélectionner une plage de cellules variable ✓ - Forum VB / VBA
2 réponses
Bonjour,
Il faut utiliser des jointures.
par exemple :
Par contre.. je ne trouve pas quelle est la relation entre tes autres tables.... donc je ne sais pas quelles id utiliser pour les jointures...
N'aurais tu pas d'autres tables qui feraient la liaison entre ta table fichefrais et les autres ???
En même temps... pourquoi avoir fait autant de table (pour les types de frais..)?
Une seule table avec un champ "type_de_frais" .. aurait suffit !
Il faut utiliser des jointures.
par exemple :
SELECT V.nom , V.prenom , F.mois , F.montantValide , F.dateModif FROM fichefrais F LEFT JOIN visiteur V ON V.id = F.idVisiteur
Par contre.. je ne trouve pas quelle est la relation entre tes autres tables.... donc je ne sais pas quelles id utiliser pour les jointures...
N'aurais tu pas d'autres tables qui feraient la liaison entre ta table fichefrais et les autres ???
En même temps... pourquoi avoir fait autant de table (pour les types de frais..)?
Une seule table avec un champ "type_de_frais" .. aurait suffit !
je sais mais c'est un exercice je peut rien modifier on ma dit qu'il faut utilise v1, v2 ou FF mais je sais pas a quoi sa correspond je suis perdue.
Si tu a une adresse mail ou autre je t'envoie le tout parce que la base de donnée est super longue avec le champs des client etc ...
Cordialement
Si tu ne comprend pas l'énoncé... le plus simple (et le plus sûr...) est de demander des explications à ton prof.
Par contre... en regardant de nouveau tes tables.. les champs utilisés pour les jointures apparaissent assez clairement..
Par exemple :
Entre la table lignefraishorsforfait et fichefrais ... utilisation des champs : (`idVisiteur`, `mois`)
Entre la table lignefraisforfait le champ `idFraisForfait` fait REFERENCES à la table fraisforfait champ :`id`
etc....( regarde les Foreign Key de tes tables )
Tu peux donc compléter les jointure comme cela par exemple :
Oui je vois mais je comprend pas les "4 montant ligne frais ", left join j'y arrive mais c'est pas mieux d'utiliser INNER ?
Ca dépend du besoin....
Regardes ces liens :
https://www.commentcamarche.net/faq/34631-mysql-quelle-jointure-choisir
https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/916084-les-jointures-entre-tables
http://www.areaprog.com/sql/cours-308-les-jointures-inner-join-left-right-et-full-outer-join