Requête multi tables

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Requête multi tables

Re: Requête multi tables

par wstud » 20 nov. 2012, 19:57

Compris moogli
Je l'ai lu mais la mise en application de la théorie est la marche qui fait trébucher le débutant.
Merci encore :D

Re: Requête multi tables

par moogli » 20 nov. 2012, 19:37

c'est que l'on vois les faiblesses d'un modèle ;)

tu peux faire des jointures sur autant de table que tu souhaite, tant que tu as de quoi faire la liaison.

A partir du moment qu'il y a une relation n,n (plusieurs à plusieurs) tu a une table qui va faire la liaison entre les deux :)


je te conseil un peu de lecteure sur le modèle entité / association (issue de la méthode merise) qui t'aidera à correctement modéliser ta table ;)



@+

Re: Requête multi tables

par wstud » 20 nov. 2012, 18:55

Merci à tous,
Je vais modifier la base en conséquence car effectivement avec idctgtiers contenant plusieurs valeurs, j'ai du faire un foreach + requête select pour afficher le libellé ctgtiers mais cela faire une requête dans le résultat de la première ...
Sinon j'ai commencé à insérer qu'une seule valeur dans idctgtiers et j'ai fait une requête jointure comme je suggère Saian.
Mais le "tiers" peut être adhérent à 2 clubs, fournisseur et sponsor entre autres.

Re: Requête multi tables

par Saian » 20 nov. 2012, 16:40

Re, moogli a raison tu devrais avoir 3 tables vu que tu as une relation n,n. La requête que j'ai écrit ne peut pas fonctionner avec une colonne idctgtiers où sont concaténées les id.

Re: Requête multi tables

par moogli » 20 nov. 2012, 15:44

Salut,

Vu les données il y a un problème de conception.
Si un tiers peux avoir plusieurs catégories (ctgtiers ?) alors tu doit avoir trois tables.
- une table tiers
- une table ctgtiers
- une table qui fait la jointure des deux
Dans la table tiers pas de références a ctgtiers
La 3ème table contient deux colonnes qui sont des clefs étrangères et correspondent aux idTiers et idctgtiers.
Quand tu ajoute un tiers tu fait :
- une insertion dans la table tiers (et tu récupère l'id tiers créer )
- une boucle sur les valeurs choisies dans le sélect des catégories. Dans cette boucle tu insert le couple idtiers / idctgtiers (pour chaque catégorie choisie).

Cela te permet de simplefier la gestion des catégories et d'éviter de mettre le merdier dans tes données (la tu ne pourra pas mettre autre chose que les valeurs de catégorie existante ce qui n'est pas le cas avec la concaténation des valeurs dans un champ).
De plus tu applique la premier forme normale : unicité des valeurs ;)


@+

Re: Requête multi tables

par wstud » 20 nov. 2012, 14:44

Merci Saian
Je vais m'absenter cet a.m
J'essayerai le script ce soir.

Re: Requête multi tables

par Saian » 20 nov. 2012, 13:32

La requête avec la jointure pour avoir les 2 id et le libellé dans la même ligne :
SELECT idtiers, t.idctgtiers, ctgtiers FROM tiers t INNER JOIN ctgtiers c ON c.idctgtiers = t.idctgtiers
A toi d'écrire la bonne boucle PHP pour afficher les infos comme tu veux.

Requête multi tables

par wstud » 20 nov. 2012, 12:22

Bonjour,
Nouveau sur le forum et après une lecture des sujets traités pour trouver une solution, je me permet d'exploser ce que j'essaie d'afficher.
Par un formulaire, j'insère des données dans 1 table Tiers par des 'select' et notamment pour idctgtiers un select multiple.
idctgtiers est insèré par implode dans la table, j'ai essayé avec serialize mais même résultat.

Par la requête suivante suivante,
$qry_select = " SELECT idtiers`, idctgtiers FROM tiers ";
j'affiche par exemple:
idtiers : 1
idctgtiers : TRS
...
idtiers : 2
idctgtiers : TRS,RDS,ASC,PTN

De la table ctgtiers et par la requête suivante:
$qry_select = " SELECT idctgtiers, ctgtiers FROM ctgtiers ";
j'affiche par exemple :
ADM : Administration
ASC : Association
FNR : Fournisseur
PTN : Partenaire
TRS : Tiers

Je voudrais afficher la liste des tiers, et pour chaque tiers le libellé de la catégorie de la manière suivante :
idtiers : 1
idctgtiers : TRS (Tiers)
...
idtiers : 2
idctgtiers : TRS (Tiers),ASC (Association),PTN(Partenaire)

J'ai fait maintes requêtes (jointures, imbriquées) qui n'ont pas abouties... quand la logique n'est pas là!

Si vous connaissez une solution ...
Je vous remercie par avance car j'ai plusieurs tables catégorielles à joindre.