MySQL utilisation de condition IF/THEN/...

Kergad -  
 swed -
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. swed
     
    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.
    2
  2. swed
     
    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.
    2
  3. swed
     
    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.
    2
  4. kergad
     
    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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. kergad
     
    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 :/
    0
  7. kergad
     
    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 :/
    0
  8. swed
     
    Bonjour,
    Yes, ca me semble correct.
    Cordialement, M.
    0