IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Recherche en texte sur plusieurs tables liées, base mysql et php
Options
schoan
posté 28 Jan 2012, 15:15
Message #1


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 913
Inscrit : 8 Jan 2003
Lieu : dans ma bibliothèque
Membre no 5 517



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


--------------------
iMac 27'' 3.4 Ghz Intel Core i7 (ex 2.7 - i5) sous OS X.10.13.6 ; Macbook Air 13,3'' sous OS X 10.14.6 ; Macbook pro 15'' 2.16 GHz Intel Core 2 Duo, 2x2 Ghz PowerPC G5 - CS3, CS4 et CS6 et des livres, beaucoup de livres.
Go to the top of the page
 
+Quote Post
Jaypee
posté 1 Feb 2012, 07:44
Message #2


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 486
Inscrit : 29 Aug 2002
Membre no 3 340



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
Go to the top of the page
 
+Quote Post
schoan
posté 1 Feb 2012, 10:12
Message #3


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 913
Inscrit : 8 Jan 2003
Lieu : dans ma bibliothèque
Membre no 5 517



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.


--------------------
iMac 27'' 3.4 Ghz Intel Core i7 (ex 2.7 - i5) sous OS X.10.13.6 ; Macbook Air 13,3'' sous OS X 10.14.6 ; Macbook pro 15'' 2.16 GHz Intel Core 2 Duo, 2x2 Ghz PowerPC G5 - CS3, CS4 et CS6 et des livres, beaucoup de livres.
Go to the top of the page
 
+Quote Post
schoan
posté 1 Feb 2012, 20:28
Message #4


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 913
Inscrit : 8 Jan 2003
Lieu : dans ma bibliothèque
Membre no 5 517



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 ?


--------------------
iMac 27'' 3.4 Ghz Intel Core i7 (ex 2.7 - i5) sous OS X.10.13.6 ; Macbook Air 13,3'' sous OS X 10.14.6 ; Macbook pro 15'' 2.16 GHz Intel Core 2 Duo, 2x2 Ghz PowerPC G5 - CS3, CS4 et CS6 et des livres, beaucoup de livres.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 29th March 2024 - 01:26