Faire une liaison entre 2 tables MySQL.

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

16 réponses

  1. crabs Messages postés 909 Statut Membre 507
     
    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
  2. crabs Messages postés 909 Statut Membre 507
     
    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
  3. crabs Messages postés 909 Statut Membre 507
     
    salut,
    Pour que le tri fonctionne, ll faut mettre un type entier sur ce champs.
    2
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. freeman034
     
    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
    1. crabs Messages postés 909 Statut Membre 507
       
      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
  6. freeman034
     
    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
  7. freeman034
     
    Salut Craps,
    Est-ce que tu as un Messenger avec lequel je peux te parler en direct stp ? Merci
    1
    1. crabs Messages postés 909 Statut Membre 507
       
      Perso moi c'est crabs.
      Désolé, mais uniquement par le biais du forum.
      0
  8. freeman034
     
    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
    1. crabs Messages postés 909 Statut Membre 507
       
      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
  9. freeman034
     
    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
  10. freeman034
     
    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
  11. freeman034
     
    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
    1. crabs Messages postés 909 Statut Membre 507
       
      Quel est le type de ton champ id dans la table nuked_rangs ?
      0
  12. freeman034
     
    Salut Crabs,
    Le champs "id" est le suivant :

    id varchar(20) latin1_general_ci No
    1
  13. freeman034
     
    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
  14. wiwimagique Messages postés 481 Statut Membre 108
     
    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
  15. crabs Messages postés 909 Statut Membre 507
     
    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