Recherche en texte sur plusieurs tables liées, base mysql et php |
Bienvenue invité ( Connexion | Inscription )
Recherche en texte sur plusieurs tables liées, base mysql et php |
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.
|
|
|
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 |
|
|
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.
|
|
|
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.
|
|
|
Nous sommes le : 29th March 2024 - 01:26 |