Page 1 sur 1

INNER JOIN problèmatique

Posté : 20 juin 2008, 13:43
par Bandenklap
Bonjour à tous,

Je bloque sur un inner join...
J'ai deux tables :
- Candidatures --> Données diverses dont un champ statut composé de chiffres (1 à 16)
- Statuts --> composé de 2 champs : un champ ID et un champ signification.

Je souhaite faire un inner join entre le champs statut de ma table candidatures et le champ ID de ma table statuts afin de pouvoir afficher les mentions signification (je ne sais pas si je suis très clair... .D)

Ci dessous ma requête :
$requete = ("SELECT * FROM candidatures INNER JOIN statuts ON candidatures.statut=statuts.ID  WHERE login = '" .$_SESSION['login']. "' AND statut='2' OR statut='5' OR statut='8' OR statut='11' ORDER BY ID DESC LIMIT 0,10 ");


La seule réponse que j'obtiens est la suivante : Champ: 'ID' dans order clause est ambigu.

Est ce que qq1 a déja eu un problème similaire? C'est mon premier inner join, et je ne sais pas comment régler le problème...

Merci par avance.

Posté : 20 juin 2008, 13:48
par guilt92
Je pense que cette question aurait plus sa place dans le forum SQL mais bon ;)

le problème vient peut etre du fait que ID existe dans les deux tables dans ton ORDER BY ID...

as tu le meme probleme avec un ORDER BY candidatures.ID ?

Posté : 20 juin 2008, 13:54
par Bandenklap
L'erreur n'apparait plus en effet. Merci

En revanche, j'appelle dans mon tableau la variable statut pour afficher la signification, et je ne récupère que l'ID du statut.
<td><?php echo ($resultat['statut']);?></td>
Ai-je fais une mauvaise manip?

merci de ton aide

Posté : 20 juin 2008, 14:05
par guilt92
Je ne suis pas spécialiste dans ce type de requete donc je vais peut etre dire une betise mais pour mois l'inner join c pour sélectionner des valeurs à partir de plusieurs table mais ca remplace pas ton champ statut par celui de l'autre table... je me demande si il ne faudrait pas un
SELECT candidatures.*,statuts.signification AS status_name ...

et après utiliser $resultat["status_name"] mais peut etre que je me trompe... Espérons que des ames plus compétentes passent sur ce message...

Posté : 20 juin 2008, 17:24
par bandenklap
Je dois avouer que je ne comprend pas bien ce que tu veux me dire... ;D
Le AS ne me dit rein du tout...

Posté : 20 juin 2008, 17:35
par steph29
dans ta table candidatures tu doit avoir un champ qui s'appelle aussi ID, mysql ne peut donc pas choisir sur quel ID trier (explication du premier message)
Ensuite avec des parentheses sur ta clause WHERE ca ira mieux ;)

donc au final ca devrait donner a peu pres ca:
$requete = ("SELECT candidatures.*,statuts.signification FROM candidatures 
INNER JOIN statuts ON candidatures.statut=statuts.ID  
WHERE login = '" .$_SESSION['login']. "' AND 
(statut='2' OR statut='5' OR statut='8' OR statut='11')
ORDER BY statuts.ID DESC 
LIMIT 0,10 ");
et il est bon de ne recuperer que les champs dont on a besoin, ici tout les champs de la table candidateure et le champ signification de la table statut

Posté : 20 juin 2008, 17:39
par guilt92
L'idée du AS c'est d'associer un nom de colonne différent à une valeur.

Par exemple si tu fais un :

Code : Tout sélectionner

SELECT id FROM table
Alors tu récupères une colonne qui s'appelle ID à laquelle tu accèdes en php par $result["ID"].

Si tu fais

Code : Tout sélectionner

SELECT id AS identifiant FROM table
Alors tu peux accéder à cette colonne en faisant $resultat["identifiant"]

Si tu ne travailles que sur une table ca ne sert a rien car chaque colonne a un nom unique, mais ici sur deux tables tu peux avoir des doublons. L'idée est donc de dire que la valeur signification de la table statut va s'appeler status_name comme ca y'aura pas de problème... d'où le AS....

Donc en faisant ce que je disais dans mon précédent POST, à savoir un SELECT Candidatures.*, statuts.significations AS status_name tu pourras peut etre récupérer la valeur qui t'interesse en tant que $resultat["status_name"]....

j espere etre un peu + clair...

Posté : 20 juin 2008, 17:59
par Invité
Super, ça fonctionne parfaitement...
Je te remercie...

Bonne soirée