[mysql] requete basique

Résolu
crazyiop -  
Ssylvainsab Messages postés 2892 Statut Modérateur -
bonjour ,je debute en php/mysql et je n'arrive pas a comprendre les jointure mysql te ce malgre plusieur exemple trouver sur le web (pas forcement toujour clair pour un neophyte)

mon probleme:
jai deux table :
message ayant un champs #envoyeur et texte
une table user ayant un champs id (repris dans #envoyeur) et un champs pseudo.

je voudrai pouvoir avec une requete recuperer le texte et le pseudo qui correspond a l'user ayant pour id #envoyeur...

6 réponses

  1. Ssylvainsab Messages postés 2892 Statut Modérateur 825
     
    Salut.

    Pour les jointures SQL, je ne maitrise que le LEFT JOIN.
    Je pense que dans ton cas ceci conviendra :
    SELECT
      message.envoyeur,
      message.texte
      user.id,
      user.pseudo
    FROM message
    LEFT JOIN user
     ON message.envoyeur=user.pseudo

    Il faut que tous les entrées de envoyeur soient les mêmes que celles de pseudo.

    Si ca ne marche pas, est-ce que tu peux détailler plus la structure de tes tables SQL ?
    De plus, j'ai l'impression que tu utilises une liaison textuelle.
    Il vaut mieux utiliser une liaison numérique ;-)

    a plis
    0
  2. crazyiop
     
    euh ben sa me sort tous les enregistrement de message avec 'NULL' dans les champs id et pseudo (sur phpmyadmin)...

    alors je recapitule j'ai 2 table
    message(#envoyeur,#receveur,texte)
    user(id,pseudo,...et dautre inutile)

    pour la liaison je connai pas c'est quoi textuelle / numerique
    mais les champs id receveur et envoyeur sont de type int

    je vais etre concret :

    ------------------| | ---------------
    user | | message
    ------------------| | --------------
    id | pseudo | | envoyeur | receveur|texte
    ----------------- | | -----------------------
    1 | jean pierre | | 1 | 2 | salut ! tu vas bien ?
    2 | arthur | | 2 | 1 | oui
    ... | | 2 | 1 | et toi ?
    -----------------| |---------------------------------------

    voila je voudrai une requete qui me permette quand par exemple jean est connecter de voir :

    message de arthur :
    oui
    --------------------
    message de arhur :
    et toi ?
    ---------------------
    ...
    0
  3. crazyiop
     
    merde ma mise en page ..
    voila

    ------------------|
    user |
    ------------------|
    id | pseudo |

    ----------------- |
    1 | jean pierre |

    2 | arthur |

    ... |
    -----------------|

    | ---------------
    | message
    | --------------
    | envoyeur | receveur|texte
    | -----------------------
    | 1 | 2 | salut ! tu vas bien ?
    | 2 | 1 | oui
    | 2 | 1 | et toi ?
    |---------------------------------------
    0
    1. Ssylvainsab Messages postés 2892 Statut Modérateur 825
       
      Merci.
      C'est sympa de te soucier de mes yeux :D

      Pour avoir une police à largeur fixe, il suffit d'utiliser <code> autour de ton code ;-)

      Et pour la différence textuelle/numérique, je vais répondre ;-)

      a plus
      0
  4. Ssylvainsab Messages postés 2892 Statut Modérateur 825
     
    C'est normal que ta requête retourne NULL, vu que les champs envoyeur et pseudo ne contiennent pas la même chose.
    Essaye :
    |-----------------| |-------------------------------------------
    |user             | |message
    |-----------------| |-------------------------------------------
    |id | pseudo      | |envoyeur |receveur |texte     
    |-----------------| |-------------------------------------------
    |1  | jean pierre | |1        |2        |salut ! tu vas bien ?
    |2  | arthur      | |2        |1        |oui 
    |...              | |2        |1        |et toi ?
    |-----------------| |-------------------------------------------
    
    $codeSQLrequete='
    SELECT
      message.envoyeur,
      message.receveur,
      message.texte,
      user.id,
      user.pseudo
    FROM message
    LEFT JOIN user
     ON message.envoyeur=user.id';
    $RQmessages=mysql_query($codeSQLrequete)or die(mysql_error());
    while($donnesArray=mysql_fetch_assoc($RQmessages))
    {
      echo'<h3>Message de ',$donnesArray['pseudo'],' :</h3>',"\n\t",
          '<p>',$donnesArray['texte'],'</p>',"\n\n";
    }

    Le différence textuelle/numérique est simple :
    quand un champ est de type text, varchar.. c'est du texte, et quand un champ est de type int, smallint... c'est un numérique.

    Une liaison numérique, c'est donc une jointure avec deux champs de type int, smallint...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. crazyiop
     
    ha ben oui c'est sa !
    J'ai compris le principe!

    merci beaucoup !
    0
  7. Ssylvainsab Messages postés 2892 Statut Modérateur 825
     
    De rien !
    Content d'avoir pu t'aider.

    Et ca fait plaisir de voir ta réponse, parfois quand on donne une réponse, celui qui avait posé la question s'en va sans rien signaler.

    a plus et bonne continuation.
    0