Page 1 sur 1

Liaison de tables : autre clé que la clé primaire

Posté : 13 mai 2005, 15:19
par dmx-moteur
Bonjour,

Est-il possible de lier 2 tables autrement que par la clé primaire de l'une vers une clé étrangère de l'autre. Je m'explique : pour construire en PHP une interface de recherche d'annonces avec menus déroulants, j'ai dû ajouter aux 2 colonnes de plusieurs tables permettant de constituer ces menus, une troisième colonne de type VARCHAR appelée CODE_NomDeMaTable.
Ce qui lie maintenant la table principale OFFRES aux autres (REGION, FONCTION, etc.) c'est donc CODE_NomDeMaTable qui n'est la clé primaire d'aucune table.
Comment faire pour que la liaison entre les tables soient effective alors que CODE_NomDeMaTable n'est pas clé primaire puisque VARCHAR et non AUTO INCREMENT.

Merci de vos réponses....

Posté : 13 mai 2005, 15:24
par mere-teresa
En fait, la liaison s'effectue au moment où tu rédiges ta requête SQL.

Fais une recherche sur les "jointures" qui permettent de créer une requête sur plusieurs tables en alignant des paramètres.

En français dans le texte, on dirait : prends tout (*) des tables truc et muche et bidule, où le nombre de truc correspond à l'id de muche et au classement de bidule.

Hum, je ne sais pas si je suis très claire...

Liaison de tables : autre clé que la clé primaire

Posté : 13 mai 2005, 15:36
par dmx-moteur
Effectivement je pensait que la liaison ce faisait sur jointure de tables. Cependant ma requete SQL ne remonte rien. Lorsque je faisais la même requete sur les clés primaires elle fonctionnait !!

SELECT annonces.INTITULE, annonces.DESCRIPTIF, annonces.CONTACT, annonces.TEL, annonces.MAIL, annonces.ADRESSE, annonces.REFERENCE, region.REGION, secteur.SECTEUR, formation.FORMATION
FROM annonces, secteur, region, formation
WHERE ID_OFFRE = variableurl AND formation.CODE_FOR = annonces.CODE_FOR AND secteur.CODE_SEC = annonces.CODE_SEC AND region.CODE_REG = annonces.CODE_REG


CODE_FOR, CODE_SEC, CODE_REG ne sont pas clés primaire des tables secteur, region, formation...

Posté : 13 mai 2005, 15:42
par mere-teresa
As-tu la possibilité de tester ta requête dans PHPMyAdmin (ou équiv.) ?

Liaison de tables : autre clé que la clé primaire

Posté : 13 mai 2005, 15:58
par dmx-moteur
Bonne idée !! Je viens de la faire sans "variableurl" mais le résultat ne donne rien alors que je devrais avoir toute la table annonces avec par ex. les noms des régions en toutes lettres ...

Posté : 13 mai 2005, 16:59
par mere-teresa
Tu n'as pas de résultat ? Mais pas d'erreur ?
Simplifie ta requête en ce cas...

Code : Tout sélectionner

SELECT * FROM annonces as a, secteur as s , region as r, formation as f WHERE f.CODE_FOR = a.CODE_FOR AND s.CODE_SEC = a.CODE_SEC AND r.CODE_REG = a.CODE_REG
Vérifie que tous ces champs existent bien dans les tables, que tu ne demandes pas 'rien' (remplis les tables à la main, en faisant correspondre les numéros au besoin).

Sinon, j'utilise ' table as x' pour raccourcir, je pense que les requêtes sont moins fatiguantes à lire pour l'œil humain, et donc, on voit mieux les erreurs.