INNER JOIN problèmatique

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 : INNER JOIN problèmatique

par Invité » 20 juin 2008, 17:59

Super, ça fonctionne parfaitement...
Je te remercie...

Bonne soirée

par guilt92 » 20 juin 2008, 17:39

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...

par steph29 » 20 juin 2008, 17:35

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

par bandenklap » 20 juin 2008, 17:24

Je dois avouer que je ne comprend pas bien ce que tu veux me dire... ;D
Le AS ne me dit rein du tout...

par guilt92 » 20 juin 2008, 14:05

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...

par Bandenklap » 20 juin 2008, 13:54

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

par guilt92 » 20 juin 2008, 13:48

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 ?

INNER JOIN problèmatique

par Bandenklap » 20 juin 2008, 13:43

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.