MySQL utilisation de condition IF/THEN/...

Bonjour,

Voila je dois faire une coraletion avec des entrées de ma table. Je cherche à identifier les personnes qui se sont MUTUELLEMENT désignées avec un choix (1:sympa, 2:nul).
Par soucis de rapidité j'aimerais utiliser qu'une requete SQL et non du PHP avec traitement de tableau.

Illustration:

id|source|destinataire|choix|

1|user1|user2|choix2|
2|user1|user3|choix1|
3|user2|user1|choix2|

J'aimerais donc extraire les ligne 1 et 3

J'ai tout essayer, JOIN, DICTINCT, ... mais rine à faire

J'en viens à me demandé si j'ai bien pensé ma DB :/

Je pensais utiliser des condition à la sauce PL/SQL, mais je ne mis connais pas trop :/

Merci à tous

7 réponses

  1. Bonjour,

    Si j'ai bien compris ce que tu veux :
    SELECT * FROM TABLE REF
    WHERE NOT EXIST
    ( SELECT 1 FROM TABLE COMP
    WHERE REF.SOURCE=COMP.DEST
    AND REF.DEST=COMP.SOURCE )

    Ca devrait fonctionner...

    Mais une table séparée pour les choix serait peut-être plus appropriée, plutot qu'un champ String contenant une liste.
    Si un jour tu souhaites faire des conditions sur les choix, ca va etre compliqué comme ca...

    Cordialement, M.
    1. Bonjour,

      Soit j'ai pas compris, ou soit c'est tout simple avec une bête jointure ; par exemple :

      SELECT REFERENCE.*
      FROM TA_TABLE REFERENCE, TA_TABLE COMPARAISON
      WHERE
      REFERENCE.SOURCE = COMPARAISON.DESTINATAIRE
      AND COMPARAISON.SOURCE = REFERENCE.DESTINATAIRE
      AND REFERENCE.CHOIX = COMPARAISON.CHOIX

      J'ai pas testé mais ca me semble correspondre à ce que tu souhaites.

      Cordialement, M.
      1. Merci swed,

        effectivement avec une jointure j'arrive à avoir mon résultat, mais je suis obliger d'utiliser deux tables :/

        Pour l instant je crée une table temporaire avec que user1 et une autre qu'avec user2, puis ensuite j'applique ma jointure.

        SELECT Table1.choix AS Choix1, Table2.choix AS Choix2
        FROM Table1, Table2
        WHERE Table1.uid_source = Table2.uid_dest
        AND Table1.uid_dest = Table2.uid_source


        es que ce système n'es pas trop lourd en traitement ?
        car il devrais y avoir se genre de requête toutes les 5min sur tous mes utilisateurs :/

        Ou alors peut être il y a moyen de trouvé une solution qu'en une seul étape?

        Merci encore
        1. Bonjour,

          Tu n'as pas besoin de deux tables.
          Dans le FROM, tu peux mettre deux fois la même table avec un alias.

          Par exemple, en admettant que tu conserves qu'une table nommée 'table' :

          SELECT REF.choix AS Choix1, COMP.choix AS Choix2
          FROM table REF, table COMP
          WHERE REF.uid_source = COMP.uid_dest
          AND REF.uid_dest = COMP.uid_source

          Non ?

          Cordialement, M.
          1. Encore merci Swed, cela marche impec. Effectivement je n'avais pas pensé à utiliser des alias pour les table.
            Maintenant je suis bloqué a un autre problème, car je ne voudrais afficher QUE les utilisateur qui ont émis un choix sur un autre utilisateur et qui n'ont pas encore eu de réponse (ex. user4).

            id_match 	source 	dest 	choix 	
                    14 	user4 	user1 	1;2;5;7; 	
             	15 	user3 	user1 	1;2;7; 	
             	10 	user1 	user2 	1;3;5;7;9 
             	11 	user2 	user1 	1;9;   	
             	12 	user1 	user3 	2;4;5 
            


            Je pensais utiliser cette commande :
            SELECT REF.choix AS Choix1, COMP.choix AS Choix2 
            FROM table REF, table COMP 
            WHERE REF.uid_source = '".$_GET['uid']."'
            AND COMP.uid_dest = '".$_GET['uid']."'
            AND REF.uid_source = COMP.uid_dest 
            AND REF.uid_dest != COMP.uid_source 


            Mais cela m'affiche trop de données

            Je pense que je me suis embrouillé quelque part, mais je n'arrive pas a m'en sortir :/
            1. Encore merci, la requête est parfaite, tu gères ;)

              Effectivement, je pense devoir créer ma table de choix.
              Mais je me demandais, car mes souvenir de DSL un peu troublés, mais avec des clé primaire et étrangère est-il possible de lier des table?

              Je pense utiliser l'id du match comme clé étrangère dans ma table choix

              Exemple :

              Table match
              id_match;source;dest;id_choix


              Table Choix fait pas les utilisateur
              id_choixUSER ; #id_match ; choix 1 ; choix 2 ; choix 3 (type BOOL)...
              


              Table désignation du choix
              id_choix;description;
              


              Es que cette composition semble correcte?
              J ai encore un peu de mal à définir à quoi sert réellement les clé étrangère :/