Partage
  • Partager sur Facebook
  • Partager sur Twitter

Réalisation de requête entre deux tables

    17 mars 2011 à 18:23:01

    Bonjour, voila je réalise enfin j'essaye de réaliser un système d'ami
    donc mes colonnes de la table ami sont comme cela :
    id amis
    1 2

    et les colonnes de ma table users comme ceci (je n'ai pas tout mis
    ;) )
    id username password
    1 cenker test
    2 test passe
    donc mon problème c'est le suivant :
    comment redonner à la valeur de la colonne id de la table ami son nom qui se trouve dans la table users..
    pareil pour la colonne ami
    • Partager sur Facebook
    • Partager sur Twitter
      17 mars 2011 à 18:28:27

      SELECT * FROM users,ami WHERE users.id = ami.amis
      • Partager sur Facebook
      • Partager sur Twitter
      Pouet.
        17 mars 2011 à 18:30:53

        mais pour lui redonner son nom =S
        • Partager sur Facebook
        • Partager sur Twitter
          17 mars 2011 à 18:34:18

          Bah comme ca XD

          $sql = 'SELECT * FROM users,ami WHERE users.id = ami.amis AND users.id = TON ID';
          while ($data = mysql_fetch_array($sql))
          {

          }

          Un truc comme ça
          • Partager sur Facebook
          • Partager sur Twitter
          Pouet.
            17 mars 2011 à 18:47:41

            SELECT username
            FROM ami a
            JOIN users u ON a.amis = u.id
            


            Il y a des conventions à respecter par contre, ce que tu ne fais pas du tout !

            Un PRIMARY KEY (abrégé PK) ou clé primaire se nomme généralement xID où x représente la première lettre du nom de la table
            Une FOREIGN KEY (abrégé FK) ou clé étrangère se nomme toujours pareil que la PK à laquelle elle fait référence

            A l'exception d'une table comme un système d'amis puisqu'il faut référencé 2 FK sur une même colonne. Mais une table ne peut avoir 2 colonnes au nom identique.

            Table amis
            aID uID_from uID_to
            1 1 2


            Table users
            uID username
            1 User 1
            1 User 2


            SELECT u1.username AS user_to, u2.username AS user_to
            FROM amis a
            JOIN users u1 ON uID_to = u1.uID
            JOIN users u2 ON uID_from = u2.uID
            WHERE :session IN (uID_to, uID_from)
            
            • Partager sur Facebook
            • Partager sur Twitter
              17 mars 2011 à 19:23:20

              Le message qui suit est une réponse automatique activée par un modérateur.
              Les réponses automatiques permettent d'éviter aux modérateurs d'avoir à répéter de nombreuses fois la même chose, et donc de leur faire gagner beaucoup de temps.
              Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter le modérateur en question par MP.


              Veuillez modifier le titre du sujet


              Bonjour,

              Ce sujet a un titre qui ne décrit pas correctement le sujet, ou il est écrit en majuscules.

              La présentation de votre message étant néanmoins correcte, nous ne fermons pas le sujet, mais vous êtes invité(e) à modifier son titre en éditant votre premier message.

              Cette modification doit être faite dans les plus brefs délais, sans quoi nous serons dans l’obligation de clore le sujet .


              Voici quelques correspondances pour vous aider à choisir au mieux votre titre :




              Comment fait-on pour éditer un titre ?

              Si vous êtes l'auteur du topic, vous pourrez uniquement le changer en éditant le premier post du topic à l'aide de l'icône Image utilisateur.



              Merci de votre compréhension :)
              Les modérateurs.
              • Partager sur Facebook
              • Partager sur Twitter
              Pwaite.net > Transfert de crédit téléphonique et monétisation de site web                                                                                        « I am awesome »
                18 mars 2011 à 5:56:17

                bonjour voila je pensais que c'était bon mais je me suis trompé o_O
                il m'affiche cela
                Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/cenker/web/www/compte.php on line 159
                <?php
                $sql = 'select * from users,ami where users.id = ami.amis and users.id = "'.$_SESSION['userid'].'"';
                while ($data = mysql_fetch_array($sql))
                {?>
                	<?php echo $data['username']; ?>
                	<?php
                	}?>
                


                ritter46 j'ai essayé ta requête sur phpmyadmin
                $sql = 'SELECT * FROM users,ami WHERE users.id = ami.amis AND users.id = TON ID';
                

                et j'obtiens cette erreur
                Column 'id' in field list is ambiguous :o
                • Partager sur Facebook
                • Partager sur Twitter
                  18 mars 2011 à 9:46:53

                  C'est toujours agréable de parler dans le vide...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 mars 2011 à 14:38:31

                    je suis désolé je n'avais pas lu..
                    pour revenir au sujet vue que j'arrivais pas à redonner le nom à l'id dans la colonne amis j'ai décidé de procéder de cette méthode

                    id amis
                    1 paul

                    par contre je sais que c'est pas bien mais dans ma table ami je n'ai aucune clef primaire et clef étrangère :euh:
                    si j'en mets il m'est impossible de faire mon système (du moins je n'ai pas trouvé un autre moyen :o )
                    • Partager sur Facebook
                    • Partager sur Twitter
                      18 mars 2011 à 14:46:49

                      Relis mon message, j'y ai tout expliqué.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        18 mars 2011 à 14:48:38

                        C'était beaucoup mieux avant... Et dans la table ami (si tu refais comme avant, avec l'id et pas le nom), le clé primaire c'est (id, ami), il faut une clé étrangère sur id vers la table membres et diem pour amis.

                        EDIT : @Zazou : pas besoin d'une clé primaire artificielle alors qu'il en existe une naturelle composée des deux colonnes de la table.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          18 mars 2011 à 14:50:20

                          j'ai fais comme ça car je n'arrive pas à retrouver le nom de l'id qui se trouve dans la colonne ami
                          :euh:
                          • Partager sur Facebook
                          • Partager sur Twitter
                            18 mars 2011 à 14:51:35

                            Avec une double jointure sur users, comme t'a momntré Zazou dans sa réponse...
                            • Partager sur Facebook
                            • Partager sur Twitter
                              18 mars 2011 à 14:54:45

                              donc je refais une table
                              avec 2 colonnes id et amis
                              id contient l'id du membre qui demande
                              et amis l'id du membre qui va être ajouté
                              et tous les deux en fk ??
                              ou bien l'id en clef primaire et amis en clef étrangère
                              • Partager sur Facebook
                              • Partager sur Twitter
                                18 mars 2011 à 14:56:21

                                PRIMARY KEY (id, amis)
                                FOREIGN KEY (id) REFERENCES users(id)
                                FOREIGN KEY (amis) REFERENCES users(id)

                                à écrire correctement, mettre en forme, etc, j'ai juste écris vite fait pour que tu comprennes.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  18 mars 2011 à 14:56:41

                                  Arf oui Taguan, tu as raison, c'pas cool la maladie j'en oublie les fondamentaux.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    18 mars 2011 à 15:00:10

                                    donc je dois mettre
                                    clef primaire à id et amis
                                    clef étrangère à id de la table users
                                    et clef étrangère à amis de la table users ??
                                    donc je dois créer une nouvelle colonne dans la table users se prénommant amis c'est cela ??
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      18 mars 2011 à 15:01:56

                                      Pas du tout...

                                      Deux clé étrangère, toutes les deux faisant référence à la colonne id de users. Une sur la colonne id de amis, l'autre sur la colonne amis de amis.

                                      Déjà, si tes noms de colonnes étaient un peu plus explicatifs...
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        18 mars 2011 à 15:05:44

                                        ... Non, quelque chose comme ça


                                        CREATE TABLE IF NOT EXISTS `amis` (
                                          `id_to` int(10) unsigned NOT NULL,
                                          `id_from` int(10) unsigned NOT NULL,
                                          `isActive` tinyint(1) unsigned NOT NULL,
                                          PRIMARY KEY (`id_to`,`id_from`),
                                          KEY `id_from` (`id_from`)
                                        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
                                        
                                        ALTER TABLE `amis`
                                          ADD CONSTRAINT `amis_ibfk_1` FOREIGN KEY (`id_to`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
                                          ADD CONSTRAINT `amis_ibfk_2` FOREIGN KEY (`id_from`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
                                        
                                        CREATE TABLE IF NOT EXISTS `users` (
                                          `id` int(10) unsigned NOT NULL,
                                          `username` varchar(50) NOT NULL,
                                          PRIMARY KEY (`id`)
                                        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
                                        


                                        Une table users contenant une PK id en auto-increment
                                        Une table amis avec 3 colonnes, id_from et id_to en PK ensemble et FK séparément.
                                        La 3ème colonne de la table amis servant à savoir si la demande d'avis a été accepté ou non.
                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Réalisation de requête entre deux tables

                                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                        • Editeur
                                        • Markdown