Partage
  • Partager sur Facebook
  • Partager sur Twitter

tables imbriquées

requete select

    26 novembre 2010 à 15:15:17

    bonjour,
    j'ai ce select

    SELECT petition.id_petition AS id_petition,
                 petition.nom AS nom,
                 petition.type AS type,
                 verif_petition.id_signataire AS id_signataire
          FROM petition
          INNER JOIN verif_petition ON verif_petition.id_petition = petition.id_petition
          WHERE petition.valid = 'oui'
                AND
                verif_petition.id_signataire <> $id_signataire
          ORDER BY id_petition DESC
    



    ce que je veux, c'est ramener les petition.nom qui n'ont pas été signée par verif_petition.signataire

    le problème de ce select, c'est qu'il marche uniquement si une autre personne a déjà signé la pétition, en fait, si l'id_petition existe dans verif_petition

    ce que je veux c'est
    verif.petition existe dans cette table ET verif.signataire != celui-que-je-test ==>on affiche petition.nom
    verif.petition n'existe pas dans cette table => on affiche petition.nom
    • Partager sur Facebook
    • Partager sur Twitter
      26 novembre 2010 à 15:18:23

      utilise LEFT JOIN au lieu de INNER JOIN et le AND verif_petition du WHERE met le dans ta jointure.
      • Partager sur Facebook
      • Partager sur Twitter
        26 novembre 2010 à 15:26:33

        cela donne cela
        SELECT petition.id_petition AS id_petition,
        	          petition.nom AS nom,
        	          petition.type AS type,
        			  verif_petition.id_signataire AS id_signataire
                FROM petition
                LEFT JOIN verif_petition ON verif_petition.id_petition = petition.id_petition  AND  verif_petition.id_signataire <> $id_signataire 
        	    WHERE petition.valid = 'oui' 
                ORDER BY id_petition DESC
        


        mais la, il me sort tout, meme si la personne existe dans verif_petition
        cette partie AND verif_petition.id_signataire <> $id_signataire ne semble plus prise en compte
        • Partager sur Facebook
        • Partager sur Twitter
          26 novembre 2010 à 15:29:11

          euh et si tu la remets dans le WHERE ?
          • Partager sur Facebook
          • Partager sur Twitter
            26 novembre 2010 à 15:41:20

            la, il ne me ramene le resultat que si il y a deja un verif.id_petition

            SELECT petition.id_petition AS id_petition,
            petition.nom AS nom,
            petition.type AS type,
            verif_petition.id_signataire AS id_signataire
            FROM petition
            LEFT JOIN verif_petition ON verif_petition.id_petition = petition.id_petition
            WHERE petition.valid = 'oui' AND verif_petition.id_signataire <> $id_signataire
            ORDER BY id_petition DESC
            • Partager sur Facebook
            • Partager sur Twitter
              26 novembre 2010 à 16:58:34

              En gros, tu veux affichés, les pétitions qui n'ont pas été signer par le membre connecté ? J'essaye de comprendre...

              :o
              • Partager sur Facebook
              • Partager sur Twitter
                26 novembre 2010 à 16:58:34

                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.


                Merci d'utiliser les balises de code


                Bonjour,

                Les forums du Site du Zér0 disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source.
                Vous avez posté un code source sans utiliser cette fonctionnalité. Pourriez-vous éditer votre message en entourant votre code des balises <code > et </code > ?

                Cela aura pour effet de "colorer" votre code et donc d'en faciliter grandement la lecture. Vous aurez ainsi beaucoup plus de chances d'avoir des réponses.

                Voici un exemple de code non coloré avec la balise "citation" (mauvais exemple) :

                Citation

                int main(int argc, char *argv[])
                {
                long choixOperation;

                printf("Choisissez l'operation a effectuer");
                /* etc. */
                }



                Voici maintenant le même code coloré, si vous aviez utilisé la balise "code" (bon exemple) :

                int main(int argc, char *argv[])
                {
                    long choixOperation;
                
                    printf("Choisissez l'operation a effectuer");
                    /* etc. */
                }
                


                C'est plus clair n'est-ce pas ? :)
                N'hésitez pas à éditer votre message pour changer la balise afin de colorer votre code.

                Plus d'informations à ce sujet


                Merci de votre compréhension :)
                Les modérateurs.
                • Partager sur Facebook
                • Partager sur Twitter
                  26 novembre 2010 à 17:17:13

                  Citation : Moxostoma

                  En gros, tu veux affichés, les pétitions qui n'ont pas été signer par le membre connecté ? J'essaye de comprendre...


                  c'est exactement cela. j'ai une table petition avec le nom et l'id + une table verif avec l'id_petition et l'id_signataire

                  pouir le modérateur : désolé, la deuxième fois, j'ai fais réponse rapide et la, il n'y avait pas le systeme pour marquer le code et j'avais un peu zappé si sur votre forum, c'était <code> ou [code]

                  promis, j'frais pus!
                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 novembre 2010 à 18:52:14

                    Si, j'ai bien compris le sujet, j'ai pensai à revoir les tables. Parce que en lisant, votre code sa ne m'a pas parus très optimisé...
                    Je me suis permis de refaire les tables, à vous de voire, si vous faites comme moi, où de faire comme vous.

                    CREATE TABLE IF NOT EXISTS `petition` (
                      `id_petition` int(11) NOT NULL AUTO_INCREMENT,
                      `nom_petition` varchar(255) NOT NULL,
                      `valide_petition` enum('oui','non') NOT NULL DEFAULT 'non',
                      PRIMARY KEY (`id_petition`)
                    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT= 0 ;
                    


                    Sur cette table, seul les nom pétitions sont enregistrer, est un booléenne, oui - la pétition est valider donc visible sur le site et non - la pétition n'est pas valider donc pas visible sur le site.

                    CREATE TABLE IF NOT EXISTS `petition_verif` (
                      `petition_verif_id` int(11) NOT NULL AUTO_INCREMENT,
                      `petition_verif_membre_id` int(11) NOT NULL,
                      `petition_participer` enum('oui','non') NOT NULL DEFAULT 'non',
                      `petition_id` int(11) NOT NULL,
                      PRIMARY KEY (`petition_verif_id`)
                    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=0 ;
                    


                    Et, dans cette table, seront enregistrer les id des membres ayant participer, avec aussi un booléenne oui - le membre à participer et non - le membre n'a pas participer, est en dernier champs petition_id qui contient l'id de la pétition de la table petition.

                    Il faut donc reprendre un la requête sql.

                    Vous n'avez pas participer à cette/ces pétition(s) :<br />
                    <ul>
                    <?php
                    mysql_connect("localhost", "root", "");
                    mysql_select_db("test");
                    
                    $id_membre = 1; //Id du membre connecter. $_SESSION['id'];
                    
                    $retour = mysql_query("SELECT id_petition, nom_petition, valide_petition 
                    petition_verif_id, petition_verif_membre_id, petition_participer, petition_id
                    FROM petition
                    JOIN petition_verif ON petition_id = petition.id_petition
                    WHERE valide_petition  = 'oui' AND petition_participer = 'non' AND petition_verif_membre_id = $id_membre")
                    or die(mysql_error());
                    //On cherche à afficher les pétitions qui sont validés et que le membre n'a pas participer
                    while ($donnees = mysql_fetch_array($retour))
                    {
                    //Affichage des pétitions que le membre connecter n'a pas encore participer
                    echo'<li><strong>'.$donnees['nom_petition'].'</strong> [LIEN]</li><br />';
                    }
                    ?>
                    </ul>
                    


                    Donc, j'espère que ceci vous sera plus compréhensible. :)
                    C'est bien sur, non complet. A vous de le fignoler, je vous ai juste donner une base de codage. Et si vous avez des questions... ;)
                    • Partager sur Facebook
                    • Partager sur Twitter

                    tables imbriquées

                    × 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