Jointure qui marche pas

Résolu
Bonjour,

mon problème est le suivant:
j'essaye de récupérer des données d'une table avec des conditions issues d'une autre table c pourquoi j'utilise une jointures et voici le code:
$s=mysql_query("SELECT * FROM tablecc, manager_approve WHERE manager_approve.ref_no='".$row['ref_no']."' AND tablecc.manager='receiving_manager'");
$data=mysql_fetch_array($s);
echo $data['nom'];
if(!empty($data['nom'])){
echo '<a href="stock/BSK'.$row['ref_no'].'.pdf">bsk'.$row['ref_no'].'</a>';}
else
{echo'
<form name="remplir" method="POST" action="pending.php"> 
<input type="hidden" name="ref_no" value="'.$row['ref_no'].'" class="envoi">
<input type="submit" name="pending" value="pending_'.$row['ref_no'].'" class="envoi">
</form>';}

mais la condition que j'ai posé ne marche pas (tablecc.manager='receiving_manager')
est ce que vous avez une idée?

13 réponses

  1. peux-tu poster les structures de tes 2 tables stp ?

    SHOW CREATE TABLE tablecc;
    SHOW CREATE TABLE manager_approve;

    Un conseil, évite les jointure comme ça, écris plutôt "[...] FROM tablecc JOIN manager_approve ON ([...etc...])", plutot que "[...] FROM tablecc, manager_approve WHERE [...]".
    1. pour la table manager_approve:
      CREATE TABLE IF NOT EXISTS 'manager_approve' (
      'ref_no' int(11) NOT NULL,
      'mail' varchar(50) NOT NULL,
      'date_approve' datetime NOT NULL,
      'remark' text NOT NULL
      )

      pour la table tablecc:

      CREATE TABLE IF NOT EXISTS 'tablecc' (
      'id' int(11) NOT NULL AUTO_INCREMENT,
      'cost_center' varchar(11) DEFAULT NULL,
      'operation' varchar(9) DEFAULT NULL,
      'manager' varchar(50) NOT NULL,
      'name' varchar(21) DEFAULT NULL,
      'email' varchar(27) DEFAULT NULL,
      PRIMARY KEY ('id')
      )
      1. pour faire plus propre tu devrais écrire:

        "SELECT * FROM manager_approve
        JOIN tablecc ON (tablecc.manager='receiving_manager')
        WHERE manager_approve.ref_no='".$row['ref_no']."'"

        dis moi si ca marche... sinon c'est que tu n'as pas d'entré dans tablecc avec manager='reveiving_manager'... ou pas de "manager_approve.ref_no='".$row['ref_no']."'"
        1. d'accord acron merci pour ta réponse je vai la testé et te répondre plus tard..
          1. je profite de poser une autre question sur le méme code dans l'URL=href="stock/BSK'.$row['ref_no'].'.pdf" ça c' bien l'emplacement des fichies pdf qui ont pour nom BSK1,BSK2,BSK3....mais qu'on je clique sur l'url rien ne s'ouvre..
            1. ca fait partie des questions que je me posais.. es-tu sûr que $row['ref_no'] contient une valeur ?

              sinon quelle est l'URL de ton site, essaie avec des chemins absolues.
              1. oui oui $row['ref_no'] contient bien une valeur je l'ai testé par echo ..
                l'url de mon site j'ai pa bien comprie ta question..
                1. et bien tu mets: stock/BSK1.pdf dans le lien, hors c'est une chemin relatif, si ton site à une URL du style http://site.com/truc/ et que tes PDF sont à http://site.com/stock/BSK1.pdf tu ne les auras pas, vu que tu va taper dans http://site.com/truc/stock/BSK1.pdf
                  1. oui mais le fichier qui contient mon code c lui méme qui contient le fichier stock alors c un chemin relatif..
                    1. au fait je viens de voir un truc mais tu fais $data['nom'] alors que dans ta table c'est 'name'...
                      1. ah oui là j'ai oublier de dire que je l'ai modifier ce name par nom j'ai croyé moi aussi que c ça le poblème pour ne pas mélanger le name de tablecc avec le name de manager_approve ..ms bon ça reste le méme problème..
                        1. je vois pas de name dans manager_approve..

                          D'ailleurs qu'est ce qui te fait dire que ca foire ?

                          Et es-tu sur d'avoir les bonnes entrées dans tes tables, post un select * des 2 tables stp... ca devient bizarre là...
                          1. re,
                            voilà j'ai résolue le problème est effectivement j'ai utilisé la requête que tu m'a proposé acron et ça a marché et en faite j'avais oublié une condition..
                            donc voilà la requéte juste:

                            $s=mysql_query("SELECT * FROM tablecc JOIN manager_approve ON (tablecc.manager='receiving_manager') WHERE manager_approve.ref_no='".$row['ref_no']."' AND tablecc.name=manager_approve.nom");


                            donc c bon merci beaucoup
                            1. cool. oublie pas de mettre "résolu" !
                              a+