IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Savoir si une ligne remplissant la condition where a été trouvée


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 33
    Points : 18
    Points
    18
    Par défaut Savoir si une ligne remplissant la condition where a été trouvée
    Bonjour,

    En fait je suis face à un problème et j'ai l'impression de tourner en rond donc je me tourne vers vous pour un peu d'aide, explications :

    Une seule table nommée : message
    Colonne : id, emet, dest, msg.

    Aperçu :
    1 | MRBOU | coucou | MRBLA
    2 | MRBLA | salut | MRBOU
    3 | MRBOU | sa va ? | MRBLA

    J'ai donc une conversation et je souhaite obtenir les membres avec qui j'ai eu une discussion et c'est là que je bloque, pourtant ça doit être tout bête enfin je crois mais malgré tout j'ai toujours un doublon car je ne sais comment savoir si la condition WHERE a déjà été remplie une fois.

    J'ai un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ("SELECT DISTINCT emet, dest, id FROM message WHERE (emet='$pseudo' OR dest='$pseudo') ORDER BY dest ASC");
    Logique que j'ai un doublon mais comment m'en débarrasse ? count(), max() ?

    Merci d'avance pour votre aide.

  2. #2
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Si tu ne cherches à avoir que les id des users avec qui tu as parlé, c'est pas tellement comme ca que tu fois faire.
    Déjà, tu n'as pas besoin de l'ID du message dans les champs que tu ramènes. Donc, c'est ce qui te crée tes doublons : Chaque id va etre différent, donc chaque ligne sera unique.

    Si tu veux juste la liste des user avec qui tu as parlé, tu peux faire un simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select emet 
    from message 
    where dest='$pseudo'
    union 
    select dest 
    from message 
    where emet='$pseudo'
    Avec ca, tu récupères la liste de tous les interlocuteurs de '$pseudo' sans doublons

    C'est ce que tu voulais ?
    Ou t'as quand même besoin d'autres informations ?

    Si tu as besoin de savoir dans quel ordre la communication s'est faite, alors reprends ta requête mais n'inclut pas l'ID, et ca devrait etre bon.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Il manque des choses dans cette table
    - notion de conversation, rien n'indique quels sont les messages qui vont ensemble
    - sauf si les ID sont 100% chronologiques, il faut ajouter un horodatage pour pouvoir reconstituer les messages dans le bon ordre

  4. #4
    Membre à l'essai
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    bstevy, Merci de ton aide, j'avais déjà pensé à UNION mais je ne voyais pas comment mettre ça en place pour éviter de récupérer 2fois le même pseudo.
    Donc si emet contient MRBOU et dest aussi je pensais qu'il allait me récupérer les deux.

    Sinon escartefigue ma table ici n'est qu'à titre d'exemple et l'id est bien d'ordre chronologique.

    Je vais tester ça tout à l'heure et je vous tiens au courant.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Voilà je viens de tester la requête et elle fonctionne parfaitement donc aucun doublon .

    Par contre si j'ai besoin de récupérer l'id comment est-ce que je peux faire, j'avoue que j'ai un peu de mal mais ça devrait m'aider à comprendre.

  6. #6
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Tu es bien conscient que par exemple, dans ton cas, si tu récupères l'ID? tu vas avoir 3 fois ton interlocuteurs avec 3 ID differents, n'est ce pas ?
    Dans ce cas, tu reprends ma requetes, et dans les deux parties, tu n'as qu'a rajouter l'ID, et ca devrait faire ton affaire

  7. #7
    Membre à l'essai
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Oui je suis entièrement d'accord que je vais avoir des id différents mais lorsque je rajoute les id dans chaque partie il me prend tous les message qui ont le dest ou l'emet avec le pseudo fourni, il ne fait pas de distinction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT emet FROM message WHERE dest='$pseudo' UNION SELECT dest FROM message WHERE
     emet='$pseudo'");
    Si je suis MRBOU J'obtiens :
    MRBLA

    MAIS si je rajoute les id de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT id,emet FROM message WHERE dest='$pseudo' UNION SELECT id, dest FROM message WHERE
     emet='$pseudo'");
    J'obtiens alors un truc ainsi :
    3 : MRBLA
    21 : MRBLA
    25 : MRBLA
    26 : MRBLA (En gros le nombre de message).

    Ce que j'aurais voulu c'est parvenir d'une part au même résultat que la première requête que vous m'avez donné et avoir en plus l'id de la ligne, je me demande si c'est pas via les jointures que je dois me pencher ?

    Donc en gros, j'aimerais juste avoir :
    26 : MRBLA

  8. #8
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Citation Envoyé par Mrzikel Voir le message
    Donc en gros, j'aimerais juste avoir :
    26 : MRBLA
    Je crois que ce dont vous avez besoin, c'est surtout de clarifier votre besoin...
    car l'ID 26, ca correspond pas à ce que vous demandez
    Citation Envoyé par Mrzikel Voir le message
    Par contre si j'ai besoin de récupérer l'id comment est-ce que je peux faire
    Si vous avez besoin de récupérer l'ID, vous le récuperer avec la requête que vous avez faite. Cette requete correspond au besoin que vous avez exprimé.

    Si vous avez besoin de récupérer un ID en particulier, le dernier par exemple, il faut le dire clairement, je peux pas l'inventer.
    Commencez par bien exprimer ce que vous voulez, et ensuite, on verra ce que l'on peut faire.

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par Mrzikel Voir le message
    Donc en gros, j'aimerais juste avoir :
    26 : MRBLA
    Il faut être plus précis et définir votre "en gros".

    Est-ce le dernier id où vous avez croisé le pseudo ?
    Est-ce le nombre de messages où vous avez croisé le pseudo ?
    Est-ce autre chose ?

  10. #10
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Bah...

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select max(id) id, gars
    from (
    SELECT id,emet gars FROM message WHERE dest='$pseudo' UNION SELECT id, dest FROM message WHERE
     emet='$pseudo')
    group by gars;
    On ne jouit bien que de ce qu’on partage.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Merci pour vos réponses,

    Désolé si j'ai pas été assez explicite, ce que je voulais dire c'est de récupérer le dernier ID du croisement qui a été fait.

    Donc admettons que j'ai cette table :
    ID | emet | dest | message

    Et dans cette table :

    1 | JEAN | MRBOU | Bonjour.
    2 | MRBOU | JEAN | Vous allez bien ?
    3 | MRBOU | MRBLA | coucou
    4 | JEAN | MRBOU | Oui bien et vous ?
    5 | MRBLA | MRBOU | salut
    6 | MRBOU | MRBLA | quoi de 9?
    7 | MRBOU | JEAN | Bien aussi.



    On va dire que je suis MRBOU et que je souhaite voir avec qui j'ai discuté tout en récupérant le dernier id du message.
    Donc j'ai besoin d'obtenir ceci :

    6 : MRBLA - quoi de 9?
    7 : JEAN - Bien aussi.


    Merci StringBuilder pour votre requête, je teste au plus vite et vous tiens au courant.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Voilà je viens de tester la requête mais elle ne donne pas le résultat que j'attendais par contre ça m'a permis de prendre je pense la bonne route.

    Je suis parvenu à obtenir la liste des utilisateurs avec qui une discussion existe, et l'id , par contre l'id n'est pas vraiment le dernier mais ça ne me pose pas de soucis, l’essentiel est que je récupère l'id et le pseudo.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ("SELECT id, emet FROM message WHERE emet IN(SELECT emet
     FROM message WHERE dest='$pseudo' UNION SELECT dest FROM message WHERE emet='$pseudo') GROUP BY emet");
    Par contre quand on regarde la requête on comprend pourquoi c'est pas exactement le dernier et si pour ça vous avez la solution n'hésitez pas comme ça je le saurais.

  13. #13
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Un SGBD correct ne devrait pas accepter ta requête ! Il n'y a a ma connaissance que MySQL pour faire cela et il retournera une valeur quelconque pour id... et pas toujours la même.
    Si tu désires obtenir la valeur la plus élevée de id pour chaque emet sélectionné, il suffit juste d'utiliser la fonction max.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT  MAX(id)
        ,   emet
    FROM    message 
    WHERE   emet IN
            (   SELECT  emet
                FROM    message
                WHERE   dest    = '$pseudo'
            UNION
                SELECT  dest
                FROM    message 
                WHERE   emet    = '$pseudo'
            )
    GROUP BY emet
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Désolé pour le retard j'avais oublié mon post

    Merci pour votre exemple, j'avais finalement comme vous le dites eu un problème et j'étais parvenu à trouver une solution avec max(), j'avais fait quelques modification sur la requête pour d'autres jointure et tout fonctionne.

    Je marque le post comme résolu, merci à tous pour votre temps et votre précieuse aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Effacer une ligne sélectionnée sous condition
    Par Liloo14 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/04/2013, 00h55
  2. [Débutant] BCBB- DbGrid savoir si une ligne est seletionnée
    Par o_live dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/01/2013, 20h06
  3. Savoir si une ligne est uncommittable
    Par benabdessamed dans le forum Développement
    Réponses: 3
    Dernier message: 04/10/2012, 07h59
  4. [XL-2007] savoir si une ligne contient au moins une cellule fusionnée
    Par toniob44 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/05/2012, 17h42
  5. savoir si une ligne d'un dataGrid est sélectionnée
    Par soft_angel dans le forum VB.NET
    Réponses: 2
    Dernier message: 21/09/2008, 21h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo