Page 1 sur 1

Liaison entre deux tables

Posté : 14 mai 2007, 17:46
par martial
Bonjour à tous!

Je posséde une base de données de marchandises avec des tables dont une intitulée t_stock avec les champs suivants
  • id_stock
    marque
    modele
    reference
    dat_achat
    prix_achat
et l'autre intitulée t_col avec les champs suivants
  • id_col
    numcol
    reference
    date_envoi
    nom
    prenom
    adresse
    CP
    VILLE
1er probleme
je souhaiterais joindre les informations des deux tables dans la table t_col ou dans une troisiéme table sachant que le champ "reference" les lient

2eme probléme
il n'y a que les quatre derniers caractéres du champ "reference" qui correspond. En effet dans la table t_stock nous pouvons avoir une reference du genre: 7509AD4556 mais qui correspond à la reference 4556 dans la table t_col (et inversement)

j'ai bien essayé avec INNER JOIN ...ON mais je flanche car MYSQL ne retourne aucun enregistrement!

Re: Liaison entre deux tables

Posté : 14 mai 2007, 18:16
par Hubert Roksor
je souhaiterais joindre les informations des deux tables dans la table t_col ou dans une troisiéme table sachant que le champ "reference" les lie

Code : Tout sélectionner

SELECT ... FROM t_col JOIN t_stock USING (reference)
il n'y a que les quatre derniers caractéres du champ "reference" qui correspond
Ben du coup ta colonne "reference" ne lie pas les tables. Crée une colonne spécial dans "t_stock" et renomme la colonne correspondante dans "t_col". Il y a d'autres moyen d'y parvenir sans créer de nouvelle colonne mais les résultats seraient désastreux donc je ne vais pas t'aider à te tirer dans le pied. ;)

Posté : 14 mai 2007, 19:24
par martial
Merci Hubert
Cela à l'air de fonctionner les données s'affichent mais en revanche elles ne s'enregistrent pas dans la table de destination !!!

ne faudrait-il pas un UPDATE ou bien la création d'une troisième table?

Posté : 14 mai 2007, 20:04
par Hubert Roksor
Err... j'ai peur de ne pas comprendre, tu veux lire quoi et tu veux écrire quoi où ? Un exemple serait le bienvenu, et tout ça.

Posté : 14 mai 2007, 21:22
par martial
En fait je souhaiterais joindre les données de la table stock avec celles de la table colis.
En fait les commerciaux diposent d'une liste de clients chez qui du matériel a été livré. Seulement la liste des clients ne contient que la référence du matériel ainsi que le numéro de colis. Une fois le colis livré je voudrais joindre et enregistrer les données dans la table colis ou dans une 3eme table qui aurait donc cette structure:
  • marque (provenant de t_stock)
    modele (provenant de t_stock)
    reference (liaison)
    dat_achat (provenant de t_stock)
    prix_achat (provenant de t_stock)
    numcol (provenant de t_col)
    date_envoi (provenant de t_col)
    nom (provenant de t_col)
    prenom (provenant de t_col)
    adresse (provenant de t_col)
    CP (provenant de t_col)
    VILLE (provenant de t_col)

    RAPPEL de la structure des deux tables
    t_stock
    id_stock
    marque
    modele
    reference
    dat_achat
    prix_achat

    t_col
    id_col
    numcol
    reference
    date_envoi
    nom
    prenom
    adresse
    CP
    VILLE
[/b]

Posté : 14 mai 2007, 23:55
par Hubert Roksor
Ok, il faut savoir que le terme "joindre" a une signification particulière en SQL et pour résumer ça correspond à la fusion (j'ai failli dire "union" mais là encore c'est un terme particulier) de deux SELECT entre deux tables possédant une relation.

Donc tu veux joindre les données de deux tables et les insérer dans une troisième... Quand est-ce que tu veux faire ça ? colis par colis ? dans ce cas fais le simplement dans l'application. Tu récupères les données avec un SELECT tout simple puis tu construis le INSERT qui correspond. C'est le plus simple et donc c'est ce qui a les meilleures chances de marcher.

Si tu veux le faire en une fois (et ne le faire qu'une seule fois) alors tu crées la 3ème table, tu prépares le SELECT qui correspond à ce que tu veux insérer et tu le préfixe de "INSERT INTO ...". Par exemple

Code : Tout sélectionner

INSERT INTO table3 SELECT ts.reference, ts.marque, tc.nom FROM t_stock JOIN t_col USING (reference)
...mais il ne semble pas que cela corresponde à ce que tu cherches à faire.

Posté : 15 mai 2007, 10:29
par martial
Mille mercis Hugues!!!

Cela correspond tout à fait à ce que je demande. Toutes les données sont jointes dans une table que j'ai créee comme tu me l'a conseillé. En revanche j'ai rajouté LEFT à JOIN pour récuperer les données ne disposant pas de date d'envoi (les marchandises référencées mais pas livrées aux clients!).
Je vais essayer de remplacer INSERT par UPDATE pour mettre à jour les données. Si cela ne fonctionne pas tant pis, j'aurais au moins eu du succès sur une partie de ma demande.

je vais m'attaquer maintenant à la partie PHP pour que les utilisateurs récupérent les données sur leur navigateur

Encore une fois MERCI!!!!

Posté : 15 mai 2007, 13:11
par Sékiltoyai
Un conseil, utilises la doc MySQL, elle peut t'être très utile : http://dev.mysql.com/doc/refman/5.0/fr/index.html