Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forums MacBidouille _ Les Langages Du Web _ Recherche en texte sur plusieurs tables liées

Écrit par : schoan 28 Jan 2012, 15:15

Bonjour,

Voici les données du problème, cela concerne une base de donnée de livres

J'ai une table contenant des informations générales : titre, année, remarques, etc.

J'ai une table contenant les imprimeurs (id, nom et ville) et une autre contenant les éditeurs (id, nom et ville).

Pour chaque livre, il peut y avoir plusieurs imprimeurs et plusieurs éditeurs

J'aimerais pouvoir faire une recherche par lieu d'édition ou d'impression et obtenir les livres concernés.

Que me conseillez-vous : faire une table contenant les liens (id) entre les livres, les éditeurs et les imprimeurs ? et ensuite comment écrit-on la requête ? Est-ce avec un JOIN LEFT ?

Merci d'avance pour votre aide

Écrit par : Jaypee 1 Feb 2012, 07:44

Le Join left te permet de construire en mémoire une table par compostion de 2 tables. Chacune des tables doit être identifiée par un symbôle par exemple L pour les livres, I pour les Imprimeurs, de sorte que s'il y a des colonnes homonymes, le prefixe par le symbôle de la table les rend explicites, par exemple si chacune a une colonne id, L.id et I.id permettent de les distinguer

La partie "projection" du select, c'est-à-dire entre le select et le from, sera une liste de prefixe.colonnes, avec les préfixes des deux tables par exemple :

select L.titre, L.auteur, I.nom as "IMRIMEUR", I.adres_vil as "VILLE" from Livres L left join Imprimeurs I on L.imprim_id = I.id where I.adres_pays = 'FRANCE' par exemple

La partie après ON contient forcément une colonne dans chaque table pour créer la jointure, ce qui te donnera une table qui n'existera que le temps ce cette requête.

TITRE AUTEUR IMPRIMEUR VILLE
------- --------- ------------- -------

Il faut ensuite ajouter une clause "group by" selon que tu veux répéter les titres... pour chaque villes ou non. Je ne suis pas expert en BD, prends mon exemple avec un grain de sel, mais l'idéee essentielle est là.

J-P

Écrit par : schoan 1 Feb 2012, 10:12

Parfait, merci !

C'est la syntaxe que j'avais adoptée mais je n'avais pas ajouté "group by". C'est ce qui manquait.

Je vais tester tout cela.

Écrit par : schoan 1 Feb 2012, 20:28

Une petite question : comment faire alors que j'ai 3 tables ici. Pour chaque livre, il peut y avoir plusieurs éditeurs et plusieurs imprimeurs. Faut-il faire deux tables intermédiaires ?

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)