[mysql] requete basique

Résolu
crazyiop -  
Ssylvainsab Messages postés 2884 Date d'inscription   Statut Modérateur Dernière intervention   -
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

Ssylvainsab Messages postés 2884 Date d'inscription   Statut Modérateur Dernière intervention   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
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
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
Ssylvainsab Messages postés 2884 Date d'inscription   Statut Modérateur Dernière intervention   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
Ssylvainsab Messages postés 2884 Date d'inscription   Statut Modérateur Dernière intervention   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

Vous n’avez pas trouvé la réponse que vous recherchez ?

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

merci beaucoup !
0
Ssylvainsab Messages postés 2884 Date d'inscription   Statut Modérateur Dernière intervention   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