Partage
  • Partager sur Facebook
  • Partager sur Twitter

excepter une valeur

Sujet résolu
    10 juillet 2019 à 0:03:31

    bonjour à tous ! si j'ai un table avec 2 champs, dont les contenus : champ1(marie, maman, marie, moi), le champ2(moi, moi, moi, maman), je narrive pas a realiser une requête dont le sens est : "JE SELECTIONNE TOUS LES VALEURS DANS LE champ1 ET champ2, QUAND LE champ1 OU LE champ2 CONTIENT LA VALEUR moi, EN ENLEVANT LES DOUBLURES, ET EN ENLEVANT AUSSI LA VALEUR moi

    j'ai fait : 

    SELECT DISTINCT champ1, champ2 FROM ma_table WHERE champ1="moi" OR champ2="moi"

    mai je n'arrive pas a enlever la valeur "moi" du résultat ! je ne sait pas comment faire, j'ai un petit peu essayer avec MINUS mais je crois que ça ne marche pas 

    • Partager sur Facebook
    • Partager sur Twitter
    Bonne journée à vous tous !
      10 juillet 2019 à 1:19:48

      salut si tu enlève la valeur que tu veux sélectionner il te reste plus rien ?
      • Partager sur Facebook
      • Partager sur Twitter
      Tout se sait un jour, il suffit de l'apprendre !
        10 juillet 2019 à 9:17:35

        Bonjour,

        tonydu76 a écrit:

        si tu enlève la valeur que tu veux sélectionner il te reste plus rien ?

        Bah oui ...

        Imaginons la table avec les données suivantes :

        Champ 1Champ 2
        Marie Moi
        Maman Moi
        Marie Moi
        Moi Maman

        Quel résultat voudrais-tu obtenir ?

        • Partager sur Facebook
        • Partager sur Twitter
        Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
          10 juillet 2019 à 11:31:23

          tonydu76 , 

          je veux obtenir le resultat : marie, maman

          je t'explique, j'essaye de réaliser une chat ou messagerie. Le champ1 c'est le nom l'envoyeur, le champ2 c'est le receveur, le but, c'est d'afficher les noms des personnes qui se sont discuter avec moi. Donc, sur le table, j'ai parlé avec marie et maman, c'est pourquoi le résultat que je viens de te citer ci-dessus! c'est pourquoi je ne veux pas de doublures, ça serait une grande aide si vous avez d'autre façon de realiser cela! est ce que je dois créer d'autres tables ou champs ou... 

          • Partager sur Facebook
          • Partager sur Twitter
          Bonne journée à vous tous !
            10 juillet 2019 à 11:52:43

            NantenainaAndriniaina a écrit:

            afficher les noms des personnes qui se sont discuter avec moi

            C'est un peu tordu mais je te propose ça :

            SELECT DISTINCT Nom
            FROM (
            	-- Messages reçus par moi
            	SELECT Champ1 AS Nom
            	FROM maTable
            	WHERE Champ2 = 'Moi'
            
            	UNION
            
            	-- Messages envoyés par moi
            	SELECT Champ2 AS Nom
            	FROM maTable
            	WHERE Champ1 = 'Moi'
            )

            Ou version CASE :

            SELECT DISTINCT CASE WHEN Champ1 = 'Moi' THEN Champ2 ELSE Champ1 END AS Nom
            FROM maTable
            WHERE
            	Champ2 = 'Moi'
            	OR Champ1 = 'Moi'

            -
            Edité par Benzouye 10 juillet 2019 à 11:55:27

            • Partager sur Facebook
            • Partager sur Twitter
            Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
              11 juillet 2019 à 0:19:51

              Benzouye, je comprend bien le sens de ton requête, mais je ne sais pas pourqoui ça n'a pas marché pour moi, çà m'a renvoie d'erreur... mais je me suis inspiré de ton requête et à trouvé celui ci qui est tres simplifié etmarche bien :

              SELECT DISTINCT receveur AS nom FROM messagerie WHERE envoyeur = 'nantenaina67'

              UNION

              SELECT DISTINCT envoyeur AS nom FROM messagerie WHERE receveur = 'nantenaina67'

              • Partager sur Facebook
              • Partager sur Twitter
              Bonne journée à vous tous !
                11 juillet 2019 à 11:43:21

                NantenainaAndriniaina a écrit:

                je me suis inspiré de ton requête et à trouvé celui ci qui est tres simplifié et marche bien

                Parfait !

                NantenainaAndriniaina a écrit:

                ça n'a pas marché pour moi, çà m'a renvoie d'erreur...

                Par curiosité, quelle erreur ?

                • Partager sur Facebook
                • Partager sur Twitter
                Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                  11 juillet 2019 à 16:02:35

                  je ne m'en souvien plus... désolé ! mais maintenant, je rencontre encore une nouvelle probleme! encore une fois... je vous explique, supposons champ3 contenant les messages envoyé par maman et moi, comment puis-recuperer chaque dernier message qu'a envoyé chaque utilisateur ou que j'ai envoyé  si j'ai parlé avec d'autres personne que mamana? je ne sai
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Bonne journée à vous tous !
                    11 juillet 2019 à 17:59:49

                    Peux-tu nous donner la structure exacte de la table en question ?

                    Comment déterminer le dernier message ? Par sa date et heure ? Par son id ?

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                      11 juillet 2019 à 21:11:29

                      CREATE TABLE IF NOT EXISTS `messagerie` (
                        `id` int(11) NOT NULL AUTO_INCREMENT,
                        `message` text NOT NULL,
                        `envoyeur` varchar(255) NOT NULL,
                        `receveur` varchar(255) NOT NULL,
                        `heure_publication` time NOT NULL,
                        `date_publication` date NOT NULL,
                        PRIMARY KEY (`id`)
                      ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
                      CREATE TABLE IF NOT EXISTS `utilisateurs` (
                        `user_id` int(11) NOT NULL AUTO_INCREMENT,
                        `user_name` varchar(255) NOT NULL,
                        `user_pseudo` varchar(255) NOT NULL,
                        `user_email` varchar(255) NOT NULL,
                        `user_password` varchar(255) NOT NULL,
                        `user_avatar` varchar(255) NOT NULL,
                        PRIMARY KEY (`user_id`)
                      ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

                      -
                      Edité par NantenainaAndriniaina 11 juillet 2019 à 21:13:11

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Bonne journée à vous tous !
                        12 juillet 2019 à 9:16:41

                        La table messagerie pourrait ne contenir qu'une seule colonne DATETIME au lieu de séparer les deux ... C'est plus pratique à gérer ...

                        Par ailleurs pourquoi ne pas stocker l'id des utilisateurs (comme clé étrangère) dans la table messagerie au lieu du nom ?

                        Un modèle plus pertinent serait donc :

                        CREATE TABLE IF NOT EXISTS `utilisateurs` (
                          `user_id` int(11) NOT NULL AUTO_INCREMENT,
                          `user_name` varchar(255) NOT NULL,
                          `user_pseudo` varchar(255) NOT NULL,
                          `user_email` varchar(255) NOT NULL,
                          `user_password` varchar(255) NOT NULL,
                          `user_avatar` varchar(255) NOT NULL,
                          PRIMARY KEY (`user_id`)
                        ) ENGINE=InnoDB;
                        
                        CREATE TABLE IF NOT EXISTS `messagerie` (
                          `id` int(11) NOT NULL AUTO_INCREMENT,
                          `message` text NOT NULL,
                          `id_envoyeur` varchar(255) NOT NULL,
                          `id_receveur` varchar(255) NOT NULL,
                          `date_heure_publication` DATETIME NOT NULL,
                          PRIMARY KEY (`id`),
                          FOREIGN KEY ( id_envoyeur ) REFERENCES utilisateurs ( user_id ),
                          FOREIGN KEY ( id_receveur ) REFERENCES utilisateurs ( user_id ),
                        ) ENGINE=InnoDB;

                        Ensuite pour récupérer les derniers messages par interlocuteur, il faudra s'appuyer sur le DATETIME maxi.

                        D'abord on calcule par interlocuteur les DATETIME maxi dans une sous-requête, que l'on utilise pour joindre avec le message et l'afficher.

                        -- Dernier message reçu par envoyeur
                        SELECT M.*
                        FROM
                        	(
                        		-- Date dernier message par envoyeur
                        		SELECT
                        			id_envoyeur,
                        			MAX( date_heure_publication ) AS max_date
                        		FROM messagerie
                        		WHERE id_receveur = 'id utilisateur connecté'
                        	) AS DE
                        		INNER JOIN messagerie M
                        			ON DE.id_envoyeur = M.id_envoyeur
                        			AND DE.max_date = M.date_heure_publication
                        WHERE M.id_receveur = 'id utilisateur connecté'
                        
                        UNION
                        
                        -- Dernier message envoyé par receveur
                        SELECT M.*
                        FROM
                        	(
                        		-- Date dernier message par receveur
                        		SELECT
                        			id_receveur,
                        			MAX( date_heure_publication ) AS max_date
                        		FROM messagerie
                        		WHERE id_envoyeur = 'id utilisateur connecté'
                        	) AS DE
                        		INNER JOIN messagerie M
                        			ON DE.id_receveur = M.id_receveur
                        			AND DE.max_date = M.date_heure_publication
                        WHERE M.id_envoyeur = 'id utilisateur connecté'

                        De cette manière, tu as le dernier message reçu ET le dernier message envoyé par interlocuteur.

                        Ce n'est pas tout à fait ce que tu cherches mais on y est presque ... Essaye de terminer ;)

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                          12 juillet 2019 à 21:11:17

                          Benzouye,

                          merci beaucoup, je ne suis pas encore fort en requêtes sql, il va d'abord falloir que j'apprennent quelques notions de certains commande de ton requête... je vais y travailler , et essayer de comprendre ! et si je n'y arrive pas, vous me verez encore posté des question...

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Bonne journée à vous tous !

                          excepter une valeur

                          × 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