Faire une liaison entre 2 tables MySQL.

Fermé
freeman034 - 21 oct. 2005 à 15:12
 freeman034 - 24 oct. 2005 à 19:35
Salut à tous,
Bon voila je suis pas vraiment un novice en PHP je me débrouille assez bien mais là je planche sur un problème où j'ai vraiment du mal à trouver une solution, en fait j'ai fais une erreur que je ne peux pas corriger, c'est d'avoir mis des informations qui permettent de trier une requête SQL dans 2 tables différentes, donc je veux savoir si quelqu'un peut me coder les lignes pour faire la liaison entre les 2 tables (exemple : when $rang == 1 -> $nom = 2) des choses comme ça, je vous ai fais un bon p'tit résumé pour vous aider à comprendre, merci de votre aide.

Voici les tables résumées : http://p.bacquet.free.fr/tables.txt
A voir également:

16 réponses

crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 506
24 oct. 2005 à 19:33
Un type de TINYINT à BIGINT.
http://dev.mysql.com/doc/refman/5.0/fr/numeric-types.html
-> fin de la page
3
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 506
21 oct. 2005 à 16:00
Salut,
Si tu débrouilles, regardes du coté des jointures de mysql, c'est le lot quotidien
de tout développeur utilsant une base de données => un petit lien :
http://dev.mysql.com/doc/refman/5.0/fr/select.html

Explique plus clairement les requètes que tu désires faire, je pas comprendre ;-)

A+, crabs
2
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 506
23 oct. 2005 à 19:37
Salut,
SELECT * FROM nuked_users AS u, nuked_rangs AS r
  WHERE u.url = r.grade
  ORDER BY r.id DESC

Tu peux aussi compléter la clause WHERE avec des AND
Exemple, la même requete mais seulement si l'url de rangs est rempli
SELECT * FROM nuked_users AS u, nuked_rangs AS r
  WHERE u.url = r.grade
     AND r.url <> ''
  ORDER BY r.id DESC

Allez, une petite dernière, imaginons que tu es un code équipe dans
la table users (nom de champ team_id) et que tu désires obtenir le résultat
pour la team de code 8 :
SELECT * FROM nuked_users AS u, nuked_rangs AS r
  WHERE u.url = r.grade
     AND u.team_id = '8'
  ORDER BY r.id DESC

A+, crabs
2
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 506
24 oct. 2005 à 19:13
salut,
Pour que le tri fonctionne, ll faut mettre un type entier sur ce champs.
2

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

Posez votre question
Oui pardon j'ai oublié de les donner :-P

$sql=mysql_query("SELECT rang, user FROM users."");
list($rang, $user) = mysql_fetch_array($sql);

$sql2=mysql_query("SELECT id, grade FROM rangs." ORDER BY id DESC");
list($id, $grade) = mysql_fetch_array($sql2);

rang = pfc, maj... (table users)
grade = pfc, maj... (table rangs)
id = 1, 2...
user = john, michael...


Idée : Sélectionner liste grades de la table rangs, ainsi que les grades assignés dans la table users, faire la laison entre les grades de users ($rang) et les grades triés numériquement de la table rangs ($grade), puis les trier grace à $id de la table rangs (de 1 à 13).
BUT : TRIER LES MEMBRES DANS UN TABLEAU DU GRADE LE PLUS ELEVE (1) AU GRADE LE MOINS ELEVE (13)


Merci pour votre aide à toutes et à tous
1
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 506
21 oct. 2005 à 18:35
Salut,
Essayes un truc comme ça :
SELECT * FROM rangs AS r, users AS u
    WHERE r.grade= u.rang
    ORDER BY r.id

Je te conseilles vraiment d'essayer de comprendre cette requète et d'apprendre
les jointures SQL c'est la base d'une utilisation correcte d'un SGBDR.
A+, crabs
0
Salut Crab,
Non je n'arrive pas à trouver la combinaison qui aille...

Je pense que la ligne de code précédente irait mieux :

select machin, truc from rangs inner join users on (rangs.grade=users.rang) where rangs.grade='5' and users.user='toto'


J'ai bien lu sur le site de MySQL mais je comprends toujours pas... je te passe la ligne de code qui doit être officiellement incorporée tu peux me l'adapter stp car moi j'ai tjrs une erreur...

$sql2=mysql_query("SELECT pseudo, mail, icq, msn, aim, yim, rang, country, url, abrev FROM users WHERE niveau>1 AND team='$team' ORDER BY niveau DESC");
$nb_members = mysql_num_rows($sql2);


Merci infiniment, c'est urgent !
1
Salut Craps,
Est-ce que tu as un Messenger avec lequel je peux te parler en direct stp ? Merci
1
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 506
23 oct. 2005 à 09:02
Perso moi c'est crabs.
Désolé, mais uniquement par le biais du forum.
0
Salut Crabs,
Excuses-moi d'avoir écorché ton nom.

En fait voici la vraie ligne que je viens de faire mais visiblement elle marche pas, tu peux me la corriger stp ?

$sql=mysql_query("SELECT ordre, grade FROM nuked_rangs inner join nuked_users on (nuked_rangs.grade=nuked_users.url) where users.url!='' ORDER BY ordre DESC");
1
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 506
23 oct. 2005 à 18:11
No problemo ;-)

Je vais avoir l'air de me répéter, mais perso je ne connais pas le contexte de
ton appli, je veux bien t'aider si tu donnes des infos précises :
- structure des tables
- quelques lignes
- le résultat escompté avec ces quelques lignes.
Pour des applis dont je connais le modèle de données il me faut parfois
plusieurs jours avant de trouver la requète correcte, alors c'est pas avec le
peu d'info que tu donnes que tu auras de l'aide.

Typiquement dans ton dernier POST tu met un critère de selection qui est url
issu de la table users, mais dans ton lien http://p.bacquet.free.fr/tables.txt et
je ne vois pas ce champ.
Perds un peu de temps à refaire un fichier tables.txt et à exprimer ce que tu
cherches à faire. J'essaierai dans la mesure de mes moyens de te répondre.

Dans l'attente de quelques précisions, crabs
0
Salut Crabs,
Voila donc ce que tu m'as demandé, j'ai fais une capture d'écran pour les 2 tables cibles, et il faut donc lier les colonnes "url" et "grade" pour montrer que c'est les memes et faie un ORDER BY ordre DESC pour trier du grade le plus élevé au plus bas, je t'ai mis une portion du script dans le fichier texte. Les voici :

http://p.bacquet.free.fr/rangs.jpg
http://p.bacquet.free.fr/users.jpg
http://p.bacquet.free.fr/script_team.txt

Merci pour ton aide !
1
Salut Crabs,
Je n'y arrive toujours pas... Voici la ligne de code que j'ai mise :

	$sql2=mysql_query("SELECT pseudo, mail, icq, msn, aim, yim, rang, country, url, abrev FROM nuked_users AS u, nuked_rangs AS r WHERE u.url = r.grade AND u.niveau>1 AND u.team = $team ORDER BY r.id DESC");
	$nb_members = mysql_num_rows($sql2);


Et voici une image du résultat :

http://p.bacquet.free.fr/roster_trouble.jpg

J'ai tout essayé de par mes connaissances et je vois toujours pas... merci pour ton aide.

Phil
1
Salut encore,
J'ai avancé, maintenant la query marche et les résultats s'affichent mais tjrs en desordre.

J'ai été voir dans MySQL j'ai exécuté la query et il s'avère que la demande de ORDER BY n'est pas prise en compte, j'ai essayé avec d'autres colonnes et ça marche pourtant... alors pourquoi ça marche pas avec cette colonne "id" ?

Voici la ligne de FETCH :

SELECT u.pseudo, u.mail, u.icq, u.msn, u.aim, u.yim, u.rang, u.country, u.url, u.abrev, r.grade, r.id FROM nuked_users AS u, nuked_rangs AS r WHERE u.url = r.grade AND u.niveau>1 AND u.team = 2 ORDER BY r.id DESC

Merci pour l'aide
1
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 506
24 oct. 2005 à 05:47
Quel est le type de ton champ id dans la table nuked_rangs ?
0
Salut Crabs,
Le champs "id" est le suivant :

id varchar(20) latin1_general_ci No
1
Qu'entends-tu par "entier" stp ? :-)
1
Yessssssssssssss ça y est ça marche je l'ai mis en int(4) et c'est impec MERCI INFINIMENT CRABS que Dieu te bénisse merci encore j'aurais jamais réussi sans ta précieuse aide.

Phil
1
wiwimagique Messages postés 481 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 20 avril 2006 108
21 oct. 2005 à 16:13
Il suffit de faire une jointure sur tes 2 tables, les champs grade et rang sont les même si j'ai bien compris.


select machin, truc from rangs inner join users on (rangs.grade=users.rang) where rangs.grade='5' and users.user='toto'

0
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 506
21 oct. 2005 à 20:46
Salut,
Le mieux c'est tu files via un fichier accessible sur le net (comme au 1er post)
les structures de tes tables, queiques lignes de ces même tables,
les données qui vont servir de critères à la realistion de ta requette et
le resultat que tu escomptes.
Et comme l'urgence n'attend pas, dès que tu auras donné ces infos très
précisément, j'essaierai de voir si je peux t'aider pour cette requette.
A+, crabs
0